/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.androidpublisher;

/**
 * Service definition for AndroidPublisher (v3).
 *
 * <p>
 * Lets Android application developers access their Google Play accounts. At a high level, the expected workflow is to "insert" an Edit, make changes as necessary, and then "commit" it. 
 * </p>
 *
 * <p>
 * For more information about this service, see the
 * <a href="https://developers.google.com/android-publisher" target="_blank">API Documentation</a>
 * </p>
 *
 * <p>
 * This service uses {@link AndroidPublisherRequestInitializer} to initialize global parameters via its
 * {@link Builder}.
 * </p>
 *
 * @since 1.3
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public class AndroidPublisher extends com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient {

  // Note: Leave this static initializer at the top of the file.
  static {
    com.google.api.client.util.Preconditions.checkState(
        (com.google.api.client.googleapis.GoogleUtils.MAJOR_VERSION == 1 &&
        (com.google.api.client.googleapis.GoogleUtils.MINOR_VERSION >= 32 ||
        (com.google.api.client.googleapis.GoogleUtils.MINOR_VERSION == 31 &&
        com.google.api.client.googleapis.GoogleUtils.BUGFIX_VERSION >= 1))) ||
        com.google.api.client.googleapis.GoogleUtils.MAJOR_VERSION >= 2,
        "You are currently running with version %s of google-api-client. " +
        "You need at least version 1.31.1 of google-api-client to run version " +
        "2.0.0 of the Google Play Android Developer API library.", com.google.api.client.googleapis.GoogleUtils.VERSION);
  }

  /**
   * The default encoded root URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   *
   * @since 1.7
   */
  public static final String DEFAULT_ROOT_URL = "https://androidpublisher.googleapis.com/";

  /**
   * The default encoded mTLS root URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   *
   * @since 1.31
   */
  public static final String DEFAULT_MTLS_ROOT_URL = "https://androidpublisher.mtls.googleapis.com/";

  /**
   * The default encoded service path of the service. This is determined when the library is
   * generated and normally should not be changed.
   *
   * @since 1.7
   */
  public static final String DEFAULT_SERVICE_PATH = "";

  /**
   * The default encoded batch path of the service. This is determined when the library is
   * generated and normally should not be changed.
   *
   * @since 1.23
   */
  public static final String DEFAULT_BATCH_PATH = "batch";

  /**
   * The default encoded base URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   */
  public static final String DEFAULT_BASE_URL = DEFAULT_ROOT_URL + DEFAULT_SERVICE_PATH;

  /**
   * Constructor.
   *
   * <p>
   * Use {@link Builder} if you need to specify any of the optional parameters.
   * </p>
   *
   * @param transport HTTP transport, which should normally be:
   *        <ul>
   *        <li>Google App Engine:
   *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}</li>
   *        <li>Android: {@code newCompatibleTransport} from
   *        {@code com.google.api.client.extensions.android.http.AndroidHttp}</li>
   *        <li>Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
   *        </li>
   *        </ul>
   * @param jsonFactory JSON factory, which may be:
   *        <ul>
   *        <li>Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}</li>
   *        <li>Google GSON: {@code com.google.api.client.json.gson.GsonFactory}</li>
   *        <li>Android Honeycomb or higher:
   *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}</li>
   *        </ul>
   * @param httpRequestInitializer HTTP request initializer or {@code null} for none
   * @since 1.7
   */
  public AndroidPublisher(com.google.api.client.http.HttpTransport transport, com.google.api.client.json.JsonFactory jsonFactory,
      com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
    this(new Builder(transport, jsonFactory, httpRequestInitializer));
  }

  /**
   * @param builder builder
   */
  AndroidPublisher(Builder builder) {
    super(builder);
  }

  @Override
  protected void initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest<?> httpClientRequest) throws java.io.IOException {
    super.initialize(httpClientRequest);
  }

  /**
   * An accessor for creating requests from the Applications collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Applications.List request = androidpublisher.applications().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Applications applications() {
    return new Applications();
  }

  /**
   * The "applications" collection of methods.
   */
  public class Applications {

    /**
     * Writes the Safety Labels declaration of an app.
     *
     * Create a request for the method "applications.dataSafety".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link DataSafety#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. Package name of the app.
     * @param content the {@link com.google.api.services.androidpublisher.model.SafetyLabelsUpdateRequest}
     * @return the request
     */
    public DataSafety dataSafety(java.lang.String packageName, com.google.api.services.androidpublisher.model.SafetyLabelsUpdateRequest content) throws java.io.IOException {
      DataSafety result = new DataSafety(packageName, content);
      initialize(result);
      return result;
    }

    public class DataSafety extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SafetyLabelsUpdateResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/dataSafety";

      /**
       * Writes the Safety Labels declaration of an app.
       *
       * Create a request for the method "applications.dataSafety".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link DataSafety#execute()} method to invoke the remote
       * operation. <p> {@link
       * DataSafety#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.SafetyLabelsUpdateRequest}
       * @since 1.13
       */
      protected DataSafety(java.lang.String packageName, com.google.api.services.androidpublisher.model.SafetyLabelsUpdateRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.SafetyLabelsUpdateResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public DataSafety set$Xgafv(java.lang.String $Xgafv) {
        return (DataSafety) super.set$Xgafv($Xgafv);
      }

      @Override
      public DataSafety setAccessToken(java.lang.String accessToken) {
        return (DataSafety) super.setAccessToken(accessToken);
      }

      @Override
      public DataSafety setAlt(java.lang.String alt) {
        return (DataSafety) super.setAlt(alt);
      }

      @Override
      public DataSafety setCallback(java.lang.String callback) {
        return (DataSafety) super.setCallback(callback);
      }

      @Override
      public DataSafety setFields(java.lang.String fields) {
        return (DataSafety) super.setFields(fields);
      }

      @Override
      public DataSafety setKey(java.lang.String key) {
        return (DataSafety) super.setKey(key);
      }

      @Override
      public DataSafety setOauthToken(java.lang.String oauthToken) {
        return (DataSafety) super.setOauthToken(oauthToken);
      }

      @Override
      public DataSafety setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (DataSafety) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public DataSafety setQuotaUser(java.lang.String quotaUser) {
        return (DataSafety) super.setQuotaUser(quotaUser);
      }

      @Override
      public DataSafety setUploadType(java.lang.String uploadType) {
        return (DataSafety) super.setUploadType(uploadType);
      }

      @Override
      public DataSafety setUploadProtocol(java.lang.String uploadProtocol) {
        return (DataSafety) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app. */
      public DataSafety setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public DataSafety set(String parameterName, Object value) {
        return (DataSafety) super.set(parameterName, value);
      }
    }

    /**
     * An accessor for creating requests from the DeviceTierConfigs collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.DeviceTierConfigs.List request = androidpublisher.deviceTierConfigs().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public DeviceTierConfigs deviceTierConfigs() {
      return new DeviceTierConfigs();
    }

    /**
     * The "deviceTierConfigs" collection of methods.
     */
    public class DeviceTierConfigs {

      /**
       * Creates a new device tier config for an app.
       *
       * Create a request for the method "deviceTierConfigs.create".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.DeviceTierConfig}
       * @return the request
       */
      public Create create(java.lang.String packageName, com.google.api.services.androidpublisher.model.DeviceTierConfig content) throws java.io.IOException {
        Create result = new Create(packageName, content);
        initialize(result);
        return result;
      }

      public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.DeviceTierConfig> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/deviceTierConfigs";

        /**
         * Creates a new device tier config for an app.
         *
         * Create a request for the method "deviceTierConfigs.create".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param content the {@link com.google.api.services.androidpublisher.model.DeviceTierConfig}
         * @since 1.13
         */
        protected Create(java.lang.String packageName, com.google.api.services.androidpublisher.model.DeviceTierConfig content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.DeviceTierConfig.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

        @Override
        public Create setAlt(java.lang.String alt) {
          return (Create) super.setAlt(alt);
        }

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

        @Override
        public Create setFields(java.lang.String fields) {
          return (Create) super.setFields(fields);
        }

        @Override
        public Create setKey(java.lang.String key) {
          return (Create) super.setKey(key);
        }

        @Override
        public Create setOauthToken(java.lang.String oauthToken) {
          return (Create) super.setOauthToken(oauthToken);
        }

        @Override
        public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Create) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Create setQuotaUser(java.lang.String quotaUser) {
          return (Create) super.setQuotaUser(quotaUser);
        }

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Create setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Whether the service should accept device IDs that are unknown to Play's device catalog.
         */
        @com.google.api.client.util.Key
        private java.lang.Boolean allowUnknownDevices;

        /** Whether the service should accept device IDs that are unknown to Play's device catalog.
         */
        public java.lang.Boolean getAllowUnknownDevices() {
          return allowUnknownDevices;
        }

        /**
         * Whether the service should accept device IDs that are unknown to Play's device catalog.
         */
        public Create setAllowUnknownDevices(java.lang.Boolean allowUnknownDevices) {
          this.allowUnknownDevices = allowUnknownDevices;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Returns a particular device tier config.
       *
       * Create a request for the method "deviceTierConfigs.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param deviceTierConfigId Required. Id of an existing device tier config.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.Long deviceTierConfigId) throws java.io.IOException {
        Get result = new Get(packageName, deviceTierConfigId);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.DeviceTierConfig> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/deviceTierConfigs/{deviceTierConfigId}";

        /**
         * Returns a particular device tier config.
         *
         * Create a request for the method "deviceTierConfigs.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param deviceTierConfigId Required. Id of an existing device tier config.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.Long deviceTierConfigId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.DeviceTierConfig.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.deviceTierConfigId = com.google.api.client.util.Preconditions.checkNotNull(deviceTierConfigId, "Required parameter deviceTierConfigId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. Id of an existing device tier config. */
        @com.google.api.client.util.Key
        private java.lang.Long deviceTierConfigId;

        /** Required. Id of an existing device tier config.
         */
        public java.lang.Long getDeviceTierConfigId() {
          return deviceTierConfigId;
        }

        /** Required. Id of an existing device tier config. */
        public Get setDeviceTierConfigId(java.lang.Long deviceTierConfigId) {
          this.deviceTierConfigId = deviceTierConfigId;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Returns created device tier configs, ordered by descending creation time.
       *
       * Create a request for the method "deviceTierConfigs.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @return the request
       */
      public List list(java.lang.String packageName) throws java.io.IOException {
        List result = new List(packageName);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListDeviceTierConfigsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/deviceTierConfigs";

        /**
         * Returns created device tier configs, ordered by descending creation time.
         *
         * Create a request for the method "deviceTierConfigs.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @since 1.13
         */
        protected List(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListDeviceTierConfigsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * The maximum number of device tier configs to return. The service may return fewer than
         * this value. If unspecified, at most 10 device tier configs will be returned. The maximum
         * value for this field is 100; values above 100 will be coerced to 100. Device tier configs
         * will be ordered by descending creation time.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of device tier configs to return. The service may return fewer than this value.
       If unspecified, at most 10 device tier configs will be returned. The maximum value for this field
       is 100; values above 100 will be coerced to 100. Device tier configs will be ordered by descending
       creation time.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /**
         * The maximum number of device tier configs to return. The service may return fewer than
         * this value. If unspecified, at most 10 device tier configs will be returned. The maximum
         * value for this field is 100; values above 100 will be coerced to 100. Device tier configs
         * will be ordered by descending creation time.
         */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A page token, received from a previous `ListDeviceTierConfigs` call. Provide this to
         * retrieve the subsequent page.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A page token, received from a previous `ListDeviceTierConfigs` call. Provide this to retrieve the
       subsequent page.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A page token, received from a previous `ListDeviceTierConfigs` call. Provide this to
         * retrieve the subsequent page.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }

    }
  }

  /**
   * An accessor for creating requests from the Apprecovery collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Apprecovery.List request = androidpublisher.apprecovery().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Apprecovery apprecovery() {
    return new Apprecovery();
  }

  /**
   * The "apprecovery" collection of methods.
   */
  public class Apprecovery {

    /**
     * Incrementally update targeting for a recovery action. Note that only the criteria selected during
     * the creation of recovery action can be expanded.
     *
     * Create a request for the method "apprecovery.addTargeting".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link AddTargeting#execute()} method to invoke the remote
     * operation.
     *
     * @param packageName Required. Package name of the app for which recovery action is to be updated.
     * @param appRecoveryId Required. ID corresponding to the app recovery action.
     * @param content the {@link com.google.api.services.androidpublisher.model.AddTargetingRequest}
     * @return the request
     */
    public AddTargeting addTargeting(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.AddTargetingRequest content) throws java.io.IOException {
      AddTargeting result = new AddTargeting(packageName, appRecoveryId, content);
      initialize(result);
      return result;
    }

    public class AddTargeting extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AddTargetingResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:addTargeting";

      /**
       * Incrementally update targeting for a recovery action. Note that only the criteria selected
       * during the creation of recovery action can be expanded.
       *
       * Create a request for the method "apprecovery.addTargeting".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link AddTargeting#execute()} method to invoke the remote
       * operation. <p> {@link
       * AddTargeting#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app for which recovery action is to be updated.
       * @param appRecoveryId Required. ID corresponding to the app recovery action.
       * @param content the {@link com.google.api.services.androidpublisher.model.AddTargetingRequest}
       * @since 1.13
       */
      protected AddTargeting(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.AddTargetingRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.AddTargetingResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.appRecoveryId = com.google.api.client.util.Preconditions.checkNotNull(appRecoveryId, "Required parameter appRecoveryId must be specified.");
      }

      @Override
      public AddTargeting set$Xgafv(java.lang.String $Xgafv) {
        return (AddTargeting) super.set$Xgafv($Xgafv);
      }

      @Override
      public AddTargeting setAccessToken(java.lang.String accessToken) {
        return (AddTargeting) super.setAccessToken(accessToken);
      }

      @Override
      public AddTargeting setAlt(java.lang.String alt) {
        return (AddTargeting) super.setAlt(alt);
      }

      @Override
      public AddTargeting setCallback(java.lang.String callback) {
        return (AddTargeting) super.setCallback(callback);
      }

      @Override
      public AddTargeting setFields(java.lang.String fields) {
        return (AddTargeting) super.setFields(fields);
      }

      @Override
      public AddTargeting setKey(java.lang.String key) {
        return (AddTargeting) super.setKey(key);
      }

      @Override
      public AddTargeting setOauthToken(java.lang.String oauthToken) {
        return (AddTargeting) super.setOauthToken(oauthToken);
      }

      @Override
      public AddTargeting setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddTargeting) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddTargeting setQuotaUser(java.lang.String quotaUser) {
        return (AddTargeting) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddTargeting setUploadType(java.lang.String uploadType) {
        return (AddTargeting) super.setUploadType(uploadType);
      }

      @Override
      public AddTargeting setUploadProtocol(java.lang.String uploadProtocol) {
        return (AddTargeting) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app for which recovery action is to be updated. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app for which recovery action is to be updated.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app for which recovery action is to be updated. */
      public AddTargeting setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Required. ID corresponding to the app recovery action. */
      @com.google.api.client.util.Key
      private java.lang.Long appRecoveryId;

      /** Required. ID corresponding to the app recovery action.
       */
      public java.lang.Long getAppRecoveryId() {
        return appRecoveryId;
      }

      /** Required. ID corresponding to the app recovery action. */
      public AddTargeting setAppRecoveryId(java.lang.Long appRecoveryId) {
        this.appRecoveryId = appRecoveryId;
        return this;
      }

      @Override
      public AddTargeting set(String parameterName, Object value) {
        return (AddTargeting) super.set(parameterName, value);
      }
    }
    /**
     * Cancel an already executing app recovery action. Note that this action changes status of the
     * recovery action to CANCELED.
     *
     * Create a request for the method "apprecovery.cancel".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. Package name of the app for which recovery action cancellation is requested.
     * @param appRecoveryId Required. ID corresponding to the app recovery action.
     * @param content the {@link com.google.api.services.androidpublisher.model.CancelAppRecoveryRequest}
     * @return the request
     */
    public Cancel cancel(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.CancelAppRecoveryRequest content) throws java.io.IOException {
      Cancel result = new Cancel(packageName, appRecoveryId, content);
      initialize(result);
      return result;
    }

    public class Cancel extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.CancelAppRecoveryResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:cancel";

      /**
       * Cancel an already executing app recovery action. Note that this action changes status of the
       * recovery action to CANCELED.
       *
       * Create a request for the method "apprecovery.cancel".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
       * <p> {@link
       * Cancel#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app for which recovery action cancellation is requested.
       * @param appRecoveryId Required. ID corresponding to the app recovery action.
       * @param content the {@link com.google.api.services.androidpublisher.model.CancelAppRecoveryRequest}
       * @since 1.13
       */
      protected Cancel(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.CancelAppRecoveryRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.CancelAppRecoveryResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.appRecoveryId = com.google.api.client.util.Preconditions.checkNotNull(appRecoveryId, "Required parameter appRecoveryId must be specified.");
      }

      @Override
      public Cancel set$Xgafv(java.lang.String $Xgafv) {
        return (Cancel) super.set$Xgafv($Xgafv);
      }

      @Override
      public Cancel setAccessToken(java.lang.String accessToken) {
        return (Cancel) super.setAccessToken(accessToken);
      }

      @Override
      public Cancel setAlt(java.lang.String alt) {
        return (Cancel) super.setAlt(alt);
      }

      @Override
      public Cancel setCallback(java.lang.String callback) {
        return (Cancel) super.setCallback(callback);
      }

      @Override
      public Cancel setFields(java.lang.String fields) {
        return (Cancel) super.setFields(fields);
      }

      @Override
      public Cancel setKey(java.lang.String key) {
        return (Cancel) super.setKey(key);
      }

      @Override
      public Cancel setOauthToken(java.lang.String oauthToken) {
        return (Cancel) super.setOauthToken(oauthToken);
      }

      @Override
      public Cancel setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Cancel) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Cancel setQuotaUser(java.lang.String quotaUser) {
        return (Cancel) super.setQuotaUser(quotaUser);
      }

      @Override
      public Cancel setUploadType(java.lang.String uploadType) {
        return (Cancel) super.setUploadType(uploadType);
      }

      @Override
      public Cancel setUploadProtocol(java.lang.String uploadProtocol) {
        return (Cancel) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app for which recovery action cancellation is requested. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app for which recovery action cancellation is requested.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app for which recovery action cancellation is requested. */
      public Cancel setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Required. ID corresponding to the app recovery action. */
      @com.google.api.client.util.Key
      private java.lang.Long appRecoveryId;

      /** Required. ID corresponding to the app recovery action.
       */
      public java.lang.Long getAppRecoveryId() {
        return appRecoveryId;
      }

      /** Required. ID corresponding to the app recovery action. */
      public Cancel setAppRecoveryId(java.lang.Long appRecoveryId) {
        this.appRecoveryId = appRecoveryId;
        return this;
      }

      @Override
      public Cancel set(String parameterName, Object value) {
        return (Cancel) super.set(parameterName, value);
      }
    }
    /**
     * Create an app recovery action with recovery status as DRAFT. Note that this action does not
     * execute the recovery action.
     *
     * Create a request for the method "apprecovery.create".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. Package name of the app on which recovery action is performed.
     * @param content the {@link com.google.api.services.androidpublisher.model.CreateDraftAppRecoveryRequest}
     * @return the request
     */
    public Create create(java.lang.String packageName, com.google.api.services.androidpublisher.model.CreateDraftAppRecoveryRequest content) throws java.io.IOException {
      Create result = new Create(packageName, content);
      initialize(result);
      return result;
    }

    public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppRecoveryAction> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/appRecoveries";

      /**
       * Create an app recovery action with recovery status as DRAFT. Note that this action does not
       * execute the recovery action.
       *
       * Create a request for the method "apprecovery.create".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       * <p> {@link
       * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app on which recovery action is performed.
       * @param content the {@link com.google.api.services.androidpublisher.model.CreateDraftAppRecoveryRequest}
       * @since 1.13
       */
      protected Create(java.lang.String packageName, com.google.api.services.androidpublisher.model.CreateDraftAppRecoveryRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.AppRecoveryAction.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public Create set$Xgafv(java.lang.String $Xgafv) {
        return (Create) super.set$Xgafv($Xgafv);
      }

      @Override
      public Create setAccessToken(java.lang.String accessToken) {
        return (Create) super.setAccessToken(accessToken);
      }

      @Override
      public Create setAlt(java.lang.String alt) {
        return (Create) super.setAlt(alt);
      }

      @Override
      public Create setCallback(java.lang.String callback) {
        return (Create) super.setCallback(callback);
      }

      @Override
      public Create setFields(java.lang.String fields) {
        return (Create) super.setFields(fields);
      }

      @Override
      public Create setKey(java.lang.String key) {
        return (Create) super.setKey(key);
      }

      @Override
      public Create setOauthToken(java.lang.String oauthToken) {
        return (Create) super.setOauthToken(oauthToken);
      }

      @Override
      public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Create) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Create setQuotaUser(java.lang.String quotaUser) {
        return (Create) super.setQuotaUser(quotaUser);
      }

      @Override
      public Create setUploadType(java.lang.String uploadType) {
        return (Create) super.setUploadType(uploadType);
      }

      @Override
      public Create setUploadProtocol(java.lang.String uploadProtocol) {
        return (Create) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app on which recovery action is performed. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app on which recovery action is performed.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app on which recovery action is performed. */
      public Create setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public Create set(String parameterName, Object value) {
        return (Create) super.set(parameterName, value);
      }
    }
    /**
     * Deploy an already created app recovery action with recovery status DRAFT. Note that this action
     * activates the recovery action for all targeted users and changes its status to ACTIVE.
     *
     * Create a request for the method "apprecovery.deploy".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Deploy#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. Package name of the app for which recovery action is deployed.
     * @param appRecoveryId Required. ID corresponding to the app recovery action to deploy.
     * @param content the {@link com.google.api.services.androidpublisher.model.DeployAppRecoveryRequest}
     * @return the request
     */
    public Deploy deploy(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.DeployAppRecoveryRequest content) throws java.io.IOException {
      Deploy result = new Deploy(packageName, appRecoveryId, content);
      initialize(result);
      return result;
    }

    public class Deploy extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.DeployAppRecoveryResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:deploy";

      /**
       * Deploy an already created app recovery action with recovery status DRAFT. Note that this action
       * activates the recovery action for all targeted users and changes its status to ACTIVE.
       *
       * Create a request for the method "apprecovery.deploy".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Deploy#execute()} method to invoke the remote operation.
       * <p> {@link
       * Deploy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app for which recovery action is deployed.
       * @param appRecoveryId Required. ID corresponding to the app recovery action to deploy.
       * @param content the {@link com.google.api.services.androidpublisher.model.DeployAppRecoveryRequest}
       * @since 1.13
       */
      protected Deploy(java.lang.String packageName, java.lang.Long appRecoveryId, com.google.api.services.androidpublisher.model.DeployAppRecoveryRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.DeployAppRecoveryResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.appRecoveryId = com.google.api.client.util.Preconditions.checkNotNull(appRecoveryId, "Required parameter appRecoveryId must be specified.");
      }

      @Override
      public Deploy set$Xgafv(java.lang.String $Xgafv) {
        return (Deploy) super.set$Xgafv($Xgafv);
      }

      @Override
      public Deploy setAccessToken(java.lang.String accessToken) {
        return (Deploy) super.setAccessToken(accessToken);
      }

      @Override
      public Deploy setAlt(java.lang.String alt) {
        return (Deploy) super.setAlt(alt);
      }

      @Override
      public Deploy setCallback(java.lang.String callback) {
        return (Deploy) super.setCallback(callback);
      }

      @Override
      public Deploy setFields(java.lang.String fields) {
        return (Deploy) super.setFields(fields);
      }

      @Override
      public Deploy setKey(java.lang.String key) {
        return (Deploy) super.setKey(key);
      }

      @Override
      public Deploy setOauthToken(java.lang.String oauthToken) {
        return (Deploy) super.setOauthToken(oauthToken);
      }

      @Override
      public Deploy setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Deploy) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Deploy setQuotaUser(java.lang.String quotaUser) {
        return (Deploy) super.setQuotaUser(quotaUser);
      }

      @Override
      public Deploy setUploadType(java.lang.String uploadType) {
        return (Deploy) super.setUploadType(uploadType);
      }

      @Override
      public Deploy setUploadProtocol(java.lang.String uploadProtocol) {
        return (Deploy) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app for which recovery action is deployed. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app for which recovery action is deployed.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app for which recovery action is deployed. */
      public Deploy setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Required. ID corresponding to the app recovery action to deploy. */
      @com.google.api.client.util.Key
      private java.lang.Long appRecoveryId;

      /** Required. ID corresponding to the app recovery action to deploy.
       */
      public java.lang.Long getAppRecoveryId() {
        return appRecoveryId;
      }

      /** Required. ID corresponding to the app recovery action to deploy. */
      public Deploy setAppRecoveryId(java.lang.Long appRecoveryId) {
        this.appRecoveryId = appRecoveryId;
        return this;
      }

      @Override
      public Deploy set(String parameterName, Object value) {
        return (Deploy) super.set(parameterName, value);
      }
    }
    /**
     * List all app recovery action resources associated with a particular package name and app version.
     *
     * Create a request for the method "apprecovery.list".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. Package name of the app for which list of recovery actions is requested.
     * @return the request
     */
    public List list(java.lang.String packageName) throws java.io.IOException {
      List result = new List(packageName);
      initialize(result);
      return result;
    }

    public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListAppRecoveriesResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/appRecoveries";

      /**
       * List all app recovery action resources associated with a particular package name and app
       * version.
       *
       * Create a request for the method "apprecovery.list".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. Package name of the app for which list of recovery actions is requested.
       * @since 1.13
       */
      protected List(java.lang.String packageName) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListAppRecoveriesResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. Package name of the app for which list of recovery actions is requested. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. Package name of the app for which list of recovery actions is requested.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. Package name of the app for which list of recovery actions is requested. */
      public List setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Required. Version code targeted by the list of recovery actions. */
      @com.google.api.client.util.Key
      private java.lang.Long versionCode;

      /** Required. Version code targeted by the list of recovery actions.
       */
      public java.lang.Long getVersionCode() {
        return versionCode;
      }

      /** Required. Version code targeted by the list of recovery actions. */
      public List setVersionCode(java.lang.Long versionCode) {
        this.versionCode = versionCode;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Edits collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Edits.List request = androidpublisher.edits().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Edits edits() {
    return new Edits();
  }

  /**
   * The "edits" collection of methods.
   */
  public class Edits {

    /**
     * Commits an app edit.
     *
     * Create a request for the method "edits.commit".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Commit#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param editId Identifier of the edit.
     * @return the request
     */
    public Commit commit(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
      Commit result = new Commit(packageName, editId);
      initialize(result);
      return result;
    }

    public class Commit extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppEdit> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}:commit";

      /**
       * Commits an app edit.
       *
       * Create a request for the method "edits.commit".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Commit#execute()} method to invoke the remote operation.
       * <p> {@link
       * Commit#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @since 1.13
       */
      protected Commit(java.lang.String packageName, java.lang.String editId) {
        super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.AppEdit.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
      }

      @Override
      public Commit set$Xgafv(java.lang.String $Xgafv) {
        return (Commit) super.set$Xgafv($Xgafv);
      }

      @Override
      public Commit setAccessToken(java.lang.String accessToken) {
        return (Commit) super.setAccessToken(accessToken);
      }

      @Override
      public Commit setAlt(java.lang.String alt) {
        return (Commit) super.setAlt(alt);
      }

      @Override
      public Commit setCallback(java.lang.String callback) {
        return (Commit) super.setCallback(callback);
      }

      @Override
      public Commit setFields(java.lang.String fields) {
        return (Commit) super.setFields(fields);
      }

      @Override
      public Commit setKey(java.lang.String key) {
        return (Commit) super.setKey(key);
      }

      @Override
      public Commit setOauthToken(java.lang.String oauthToken) {
        return (Commit) super.setOauthToken(oauthToken);
      }

      @Override
      public Commit setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Commit) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Commit setQuotaUser(java.lang.String quotaUser) {
        return (Commit) super.setQuotaUser(quotaUser);
      }

      @Override
      public Commit setUploadType(java.lang.String uploadType) {
        return (Commit) super.setUploadType(uploadType);
      }

      @Override
      public Commit setUploadProtocol(java.lang.String uploadProtocol) {
        return (Commit) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Commit setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Identifier of the edit. */
      @com.google.api.client.util.Key
      private java.lang.String editId;

      /** Identifier of the edit.
       */
      public java.lang.String getEditId() {
        return editId;
      }

      /** Identifier of the edit. */
      public Commit setEditId(java.lang.String editId) {
        this.editId = editId;
        return this;
      }

      /**
       * When a rejection happens, the parameter will make sure that the changes in this edit won't
       * be reviewed until they are explicitly sent for review from within the Google Play Console
       * UI. These changes will be added to any other changes that are not yet sent for review.
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean changesNotSentForReview;

      /** When a rejection happens, the parameter will make sure that the changes in this edit won't be
     reviewed until they are explicitly sent for review from within the Google Play Console UI. These
     changes will be added to any other changes that are not yet sent for review.
       */
      public java.lang.Boolean getChangesNotSentForReview() {
        return changesNotSentForReview;
      }

      /**
       * When a rejection happens, the parameter will make sure that the changes in this edit won't
       * be reviewed until they are explicitly sent for review from within the Google Play Console
       * UI. These changes will be added to any other changes that are not yet sent for review.
       */
      public Commit setChangesNotSentForReview(java.lang.Boolean changesNotSentForReview) {
        this.changesNotSentForReview = changesNotSentForReview;
        return this;
      }

      @Override
      public Commit set(String parameterName, Object value) {
        return (Commit) super.set(parameterName, value);
      }
    }
    /**
     * Deletes an app edit.
     *
     * Create a request for the method "edits.delete".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param editId Identifier of the edit.
     * @return the request
     */
    public Delete delete(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
      Delete result = new Delete(packageName, editId);
      initialize(result);
      return result;
    }

    public class Delete extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}";

      /**
       * Deletes an app edit.
       *
       * Create a request for the method "edits.delete".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       * <p> {@link
       * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @since 1.13
       */
      protected Delete(java.lang.String packageName, java.lang.String editId) {
        super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
      }

      @Override
      public Delete set$Xgafv(java.lang.String $Xgafv) {
        return (Delete) super.set$Xgafv($Xgafv);
      }

      @Override
      public Delete setAccessToken(java.lang.String accessToken) {
        return (Delete) super.setAccessToken(accessToken);
      }

      @Override
      public Delete setAlt(java.lang.String alt) {
        return (Delete) super.setAlt(alt);
      }

      @Override
      public Delete setCallback(java.lang.String callback) {
        return (Delete) super.setCallback(callback);
      }

      @Override
      public Delete setFields(java.lang.String fields) {
        return (Delete) super.setFields(fields);
      }

      @Override
      public Delete setKey(java.lang.String key) {
        return (Delete) super.setKey(key);
      }

      @Override
      public Delete setOauthToken(java.lang.String oauthToken) {
        return (Delete) super.setOauthToken(oauthToken);
      }

      @Override
      public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Delete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Delete setQuotaUser(java.lang.String quotaUser) {
        return (Delete) super.setQuotaUser(quotaUser);
      }

      @Override
      public Delete setUploadType(java.lang.String uploadType) {
        return (Delete) super.setUploadType(uploadType);
      }

      @Override
      public Delete setUploadProtocol(java.lang.String uploadProtocol) {
        return (Delete) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Delete setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Identifier of the edit. */
      @com.google.api.client.util.Key
      private java.lang.String editId;

      /** Identifier of the edit.
       */
      public java.lang.String getEditId() {
        return editId;
      }

      /** Identifier of the edit. */
      public Delete setEditId(java.lang.String editId) {
        this.editId = editId;
        return this;
      }

      @Override
      public Delete set(String parameterName, Object value) {
        return (Delete) super.set(parameterName, value);
      }
    }
    /**
     * Gets an app edit.
     *
     * Create a request for the method "edits.get".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param editId Identifier of the edit.
     * @return the request
     */
    public Get get(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
      Get result = new Get(packageName, editId);
      initialize(result);
      return result;
    }

    public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppEdit> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}";

      /**
       * Gets an app edit.
       *
       * Create a request for the method "edits.get".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @since 1.13
       */
      protected Get(java.lang.String packageName, java.lang.String editId) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.AppEdit.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Get setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Identifier of the edit. */
      @com.google.api.client.util.Key
      private java.lang.String editId;

      /** Identifier of the edit.
       */
      public java.lang.String getEditId() {
        return editId;
      }

      /** Identifier of the edit. */
      public Get setEditId(java.lang.String editId) {
        this.editId = editId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Creates a new edit for an app.
     *
     * Create a request for the method "edits.insert".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Insert#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param content the {@link com.google.api.services.androidpublisher.model.AppEdit}
     * @return the request
     */
    public Insert insert(java.lang.String packageName, com.google.api.services.androidpublisher.model.AppEdit content) throws java.io.IOException {
      Insert result = new Insert(packageName, content);
      initialize(result);
      return result;
    }

    public class Insert extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppEdit> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits";

      /**
       * Creates a new edit for an app.
       *
       * Create a request for the method "edits.insert".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Insert#execute()} method to invoke the remote operation.
       * <p> {@link
       * Insert#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.AppEdit}
       * @since 1.13
       */
      protected Insert(java.lang.String packageName, com.google.api.services.androidpublisher.model.AppEdit content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.AppEdit.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public Insert set$Xgafv(java.lang.String $Xgafv) {
        return (Insert) super.set$Xgafv($Xgafv);
      }

      @Override
      public Insert setAccessToken(java.lang.String accessToken) {
        return (Insert) super.setAccessToken(accessToken);
      }

      @Override
      public Insert setAlt(java.lang.String alt) {
        return (Insert) super.setAlt(alt);
      }

      @Override
      public Insert setCallback(java.lang.String callback) {
        return (Insert) super.setCallback(callback);
      }

      @Override
      public Insert setFields(java.lang.String fields) {
        return (Insert) super.setFields(fields);
      }

      @Override
      public Insert setKey(java.lang.String key) {
        return (Insert) super.setKey(key);
      }

      @Override
      public Insert setOauthToken(java.lang.String oauthToken) {
        return (Insert) super.setOauthToken(oauthToken);
      }

      @Override
      public Insert setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Insert) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Insert setQuotaUser(java.lang.String quotaUser) {
        return (Insert) super.setQuotaUser(quotaUser);
      }

      @Override
      public Insert setUploadType(java.lang.String uploadType) {
        return (Insert) super.setUploadType(uploadType);
      }

      @Override
      public Insert setUploadProtocol(java.lang.String uploadProtocol) {
        return (Insert) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Insert setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public Insert set(String parameterName, Object value) {
        return (Insert) super.set(parameterName, value);
      }
    }
    /**
     * Validates an app edit.
     *
     * Create a request for the method "edits.validate".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Validate#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param editId Identifier of the edit.
     * @return the request
     */
    public Validate validate(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
      Validate result = new Validate(packageName, editId);
      initialize(result);
      return result;
    }

    public class Validate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppEdit> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}:validate";

      /**
       * Validates an app edit.
       *
       * Create a request for the method "edits.validate".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Validate#execute()} method to invoke the remote operation.
       * <p> {@link
       * Validate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @since 1.13
       */
      protected Validate(java.lang.String packageName, java.lang.String editId) {
        super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.AppEdit.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
      }

      @Override
      public Validate set$Xgafv(java.lang.String $Xgafv) {
        return (Validate) super.set$Xgafv($Xgafv);
      }

      @Override
      public Validate setAccessToken(java.lang.String accessToken) {
        return (Validate) super.setAccessToken(accessToken);
      }

      @Override
      public Validate setAlt(java.lang.String alt) {
        return (Validate) super.setAlt(alt);
      }

      @Override
      public Validate setCallback(java.lang.String callback) {
        return (Validate) super.setCallback(callback);
      }

      @Override
      public Validate setFields(java.lang.String fields) {
        return (Validate) super.setFields(fields);
      }

      @Override
      public Validate setKey(java.lang.String key) {
        return (Validate) super.setKey(key);
      }

      @Override
      public Validate setOauthToken(java.lang.String oauthToken) {
        return (Validate) super.setOauthToken(oauthToken);
      }

      @Override
      public Validate setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Validate) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Validate setQuotaUser(java.lang.String quotaUser) {
        return (Validate) super.setQuotaUser(quotaUser);
      }

      @Override
      public Validate setUploadType(java.lang.String uploadType) {
        return (Validate) super.setUploadType(uploadType);
      }

      @Override
      public Validate setUploadProtocol(java.lang.String uploadProtocol) {
        return (Validate) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Validate setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Identifier of the edit. */
      @com.google.api.client.util.Key
      private java.lang.String editId;

      /** Identifier of the edit.
       */
      public java.lang.String getEditId() {
        return editId;
      }

      /** Identifier of the edit. */
      public Validate setEditId(java.lang.String editId) {
        this.editId = editId;
        return this;
      }

      @Override
      public Validate set(String parameterName, Object value) {
        return (Validate) super.set(parameterName, value);
      }
    }

    /**
     * An accessor for creating requests from the Apks collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Apks.List request = androidpublisher.apks().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Apks apks() {
      return new Apks();
    }

    /**
     * The "apks" collection of methods.
     */
    public class Apks {

      /**
       * Creates a new APK without uploading the APK itself to Google Play, instead hosting the APK at a
       * specified URL. This function is only available to organizations using Managed Play whose
       * application is configured to restrict distribution to the organizations.
       *
       * Create a request for the method "apks.addexternallyhosted".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Addexternallyhosted#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param content the {@link com.google.api.services.androidpublisher.model.ApksAddExternallyHostedRequest}
       * @return the request
       */
      public Addexternallyhosted addexternallyhosted(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.ApksAddExternallyHostedRequest content) throws java.io.IOException {
        Addexternallyhosted result = new Addexternallyhosted(packageName, editId, content);
        initialize(result);
        return result;
      }

      public class Addexternallyhosted extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ApksAddExternallyHostedResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/externallyHosted";

        /**
         * Creates a new APK without uploading the APK itself to Google Play, instead hosting the APK at a
         * specified URL. This function is only available to organizations using Managed Play whose
         * application is configured to restrict distribution to the organizations.
         *
         * Create a request for the method "apks.addexternallyhosted".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Addexternallyhosted#execute()} method to invoke the remote
         * operation. <p> {@link Addexternallyhosted#initialize(com.google.api.client.googleapis.services.
         * AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
         * invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param content the {@link com.google.api.services.androidpublisher.model.ApksAddExternallyHostedRequest}
         * @since 1.13
         */
        protected Addexternallyhosted(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.ApksAddExternallyHostedRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.ApksAddExternallyHostedResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public Addexternallyhosted set$Xgafv(java.lang.String $Xgafv) {
          return (Addexternallyhosted) super.set$Xgafv($Xgafv);
        }

        @Override
        public Addexternallyhosted setAccessToken(java.lang.String accessToken) {
          return (Addexternallyhosted) super.setAccessToken(accessToken);
        }

        @Override
        public Addexternallyhosted setAlt(java.lang.String alt) {
          return (Addexternallyhosted) super.setAlt(alt);
        }

        @Override
        public Addexternallyhosted setCallback(java.lang.String callback) {
          return (Addexternallyhosted) super.setCallback(callback);
        }

        @Override
        public Addexternallyhosted setFields(java.lang.String fields) {
          return (Addexternallyhosted) super.setFields(fields);
        }

        @Override
        public Addexternallyhosted setKey(java.lang.String key) {
          return (Addexternallyhosted) super.setKey(key);
        }

        @Override
        public Addexternallyhosted setOauthToken(java.lang.String oauthToken) {
          return (Addexternallyhosted) super.setOauthToken(oauthToken);
        }

        @Override
        public Addexternallyhosted setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Addexternallyhosted) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Addexternallyhosted setQuotaUser(java.lang.String quotaUser) {
          return (Addexternallyhosted) super.setQuotaUser(quotaUser);
        }

        @Override
        public Addexternallyhosted setUploadType(java.lang.String uploadType) {
          return (Addexternallyhosted) super.setUploadType(uploadType);
        }

        @Override
        public Addexternallyhosted setUploadProtocol(java.lang.String uploadProtocol) {
          return (Addexternallyhosted) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Addexternallyhosted setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Addexternallyhosted setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Addexternallyhosted set(String parameterName, Object value) {
          return (Addexternallyhosted) super.set(parameterName, value);
        }
      }
      /**
       * Lists all current APKs of the app and edit.
       *
       * Create a request for the method "apks.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        List result = new List(packageName, editId);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ApksListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks";

        /**
         * Lists all current APKs of the app and edit.
         *
         * Create a request for the method "apks.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ApksListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public List setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Uploads an APK and adds to the current edit.
       *
       * Create a request for the method "apks.upload".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        Upload result = new Upload(packageName, editId);
        initialize(result);
        return result;
      }

      /**
       * Uploads an APK and adds to the current edit.
       *
       * Create a request for the method "apks.upload".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * <p>
       * This method should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.@param editId Identifier of the edit.
       * @param mediaContent The media HTTP content.
       * @return the request
       * @throws java.io.IOException if the initialization of the request fails
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, mediaContent);
        initialize(result);
        return result;
      }

      public class Upload extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Apk> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks";

        /**
         * Uploads an APK and adds to the current edit.
         *
         * Create a request for the method "apks.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.Apk.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        /**
         * Uploads an APK and adds to the current edit.
         *
         * Create a request for the method "apks.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * <p>
         * This constructor should be used for uploading media content.
         * </p>
         *
         * @param packageName Package name of the app.@param editId Identifier of the edit.
         * @param mediaContent The media HTTP content.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
          super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.Apk.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
          initializeMediaUpload(mediaContent);
        }

        @Override
        public Upload set$Xgafv(java.lang.String $Xgafv) {
          return (Upload) super.set$Xgafv($Xgafv);
        }

        @Override
        public Upload setAccessToken(java.lang.String accessToken) {
          return (Upload) super.setAccessToken(accessToken);
        }

        @Override
        public Upload setAlt(java.lang.String alt) {
          return (Upload) super.setAlt(alt);
        }

        @Override
        public Upload setCallback(java.lang.String callback) {
          return (Upload) super.setCallback(callback);
        }

        @Override
        public Upload setFields(java.lang.String fields) {
          return (Upload) super.setFields(fields);
        }

        @Override
        public Upload setKey(java.lang.String key) {
          return (Upload) super.setKey(key);
        }

        @Override
        public Upload setOauthToken(java.lang.String oauthToken) {
          return (Upload) super.setOauthToken(oauthToken);
        }

        @Override
        public Upload setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Upload) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Upload setQuotaUser(java.lang.String quotaUser) {
          return (Upload) super.setQuotaUser(quotaUser);
        }

        @Override
        public Upload setUploadType(java.lang.String uploadType) {
          return (Upload) super.setUploadType(uploadType);
        }

        @Override
        public Upload setUploadProtocol(java.lang.String uploadProtocol) {
          return (Upload) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Upload setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Upload setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Upload set(String parameterName, Object value) {
          return (Upload) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Bundles collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Bundles.List request = androidpublisher.bundles().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Bundles bundles() {
      return new Bundles();
    }

    /**
     * The "bundles" collection of methods.
     */
    public class Bundles {

      /**
       * Lists all current Android App Bundles of the app and edit.
       *
       * Create a request for the method "bundles.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        List result = new List(packageName, editId);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BundlesListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles";

        /**
         * Lists all current Android App Bundles of the app and edit.
         *
         * Create a request for the method "bundles.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.BundlesListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public List setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Uploads a new Android App Bundle to this edit. If you are using the Google API client libraries,
       * please increase the timeout of the http request before calling this endpoint (a timeout of 2
       * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
       * library/java/google-api-java-client/errors) for an example in java.
       *
       * Create a request for the method "bundles.upload".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        Upload result = new Upload(packageName, editId);
        initialize(result);
        return result;
      }

      /**
       * Uploads a new Android App Bundle to this edit. If you are using the Google API client libraries,
       * please increase the timeout of the http request before calling this endpoint (a timeout of 2
       * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
       * library/java/google-api-java-client/errors) for an example in java.
       *
       * Create a request for the method "bundles.upload".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * <p>
       * This method should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.@param editId Identifier of the edit.
       * @param mediaContent The media HTTP content.
       * @return the request
       * @throws java.io.IOException if the initialization of the request fails
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, mediaContent);
        initialize(result);
        return result;
      }

      public class Upload extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Bundle> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles";

        /**
         * Uploads a new Android App Bundle to this edit. If you are using the Google API client
         * libraries, please increase the timeout of the http request before calling this endpoint (a
         * timeout of 2 minutes is recommended). See [Timeouts and
         * Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors)
         * for an example in java.
         *
         * Create a request for the method "bundles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.Bundle.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        /**
         * Uploads a new Android App Bundle to this edit. If you are using the Google API client
         * libraries, please increase the timeout of the http request before calling this endpoint (a
         * timeout of 2 minutes is recommended). See [Timeouts and
         * Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors)
         * for an example in java.
         *
         * Create a request for the method "bundles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * <p>
         * This constructor should be used for uploading media content.
         * </p>
         *
         * @param packageName Package name of the app.@param editId Identifier of the edit.
         * @param mediaContent The media HTTP content.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
          super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.Bundle.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
          initializeMediaUpload(mediaContent);
        }

        @Override
        public Upload set$Xgafv(java.lang.String $Xgafv) {
          return (Upload) super.set$Xgafv($Xgafv);
        }

        @Override
        public Upload setAccessToken(java.lang.String accessToken) {
          return (Upload) super.setAccessToken(accessToken);
        }

        @Override
        public Upload setAlt(java.lang.String alt) {
          return (Upload) super.setAlt(alt);
        }

        @Override
        public Upload setCallback(java.lang.String callback) {
          return (Upload) super.setCallback(callback);
        }

        @Override
        public Upload setFields(java.lang.String fields) {
          return (Upload) super.setFields(fields);
        }

        @Override
        public Upload setKey(java.lang.String key) {
          return (Upload) super.setKey(key);
        }

        @Override
        public Upload setOauthToken(java.lang.String oauthToken) {
          return (Upload) super.setOauthToken(oauthToken);
        }

        @Override
        public Upload setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Upload) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Upload setQuotaUser(java.lang.String quotaUser) {
          return (Upload) super.setQuotaUser(quotaUser);
        }

        @Override
        public Upload setUploadType(java.lang.String uploadType) {
          return (Upload) super.setUploadType(uploadType);
        }

        @Override
        public Upload setUploadProtocol(java.lang.String uploadProtocol) {
          return (Upload) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Upload setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Upload setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Deprecated. The installation warning has been removed, it's not necessary to set this
         * field anymore.
         */
        @com.google.api.client.util.Key
        private java.lang.Boolean ackBundleInstallationWarning;

        /** Deprecated. The installation warning has been removed, it's not necessary to set this field
       anymore.
         */
        public java.lang.Boolean getAckBundleInstallationWarning() {
          return ackBundleInstallationWarning;
        }

        /**
         * Deprecated. The installation warning has been removed, it's not necessary to set this
         * field anymore.
         */
        public Upload setAckBundleInstallationWarning(java.lang.Boolean ackBundleInstallationWarning) {
          this.ackBundleInstallationWarning = ackBundleInstallationWarning;
          return this;
        }

        /**
         * Device tier config (DTC) to be used for generating deliverables (APKs). Contains id of
         * the DTC or "LATEST" for last uploaded DTC.
         */
        @com.google.api.client.util.Key
        private java.lang.String deviceTierConfigId;

        /** Device tier config (DTC) to be used for generating deliverables (APKs). Contains id of the DTC or
       "LATEST" for last uploaded DTC.
         */
        public java.lang.String getDeviceTierConfigId() {
          return deviceTierConfigId;
        }

        /**
         * Device tier config (DTC) to be used for generating deliverables (APKs). Contains id of
         * the DTC or "LATEST" for last uploaded DTC.
         */
        public Upload setDeviceTierConfigId(java.lang.String deviceTierConfigId) {
          this.deviceTierConfigId = deviceTierConfigId;
          return this;
        }

        @Override
        public Upload set(String parameterName, Object value) {
          return (Upload) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Countryavailability collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Countryavailability.List request = androidpublisher.countryavailability().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Countryavailability countryavailability() {
      return new Countryavailability();
    }

    /**
     * The "countryavailability" collection of methods.
     */
    public class Countryavailability {

      /**
       * Gets country availability.
       *
       * Create a request for the method "countryavailability.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track The track to read from.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId, java.lang.String track) throws java.io.IOException {
        Get result = new Get(packageName, editId, track);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.TrackCountryAvailability> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/countryAvailability/{track}";

        /**
         * Gets country availability.
         *
         * Create a request for the method "countryavailability.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track The track to read from.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId, java.lang.String track) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.TrackCountryAvailability.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /** The track to read from. */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** The track to read from.
         */
        public java.lang.String getTrack() {
          return track;
        }

        /** The track to read from. */
        public Get setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Deobfuscationfiles collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Deobfuscationfiles.List request = androidpublisher.deobfuscationfiles().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Deobfuscationfiles deobfuscationfiles() {
      return new Deobfuscationfiles();
    }

    /**
     * The "deobfuscationfiles" collection of methods.
     */
    public class Deobfuscationfiles {

      /**
       * Uploads a new deobfuscation file and attaches to the specified APK.
       *
       * Create a request for the method "deobfuscationfiles.upload".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * @param packageName Unique identifier for the Android app.
       * @param editId Unique identifier for this edit.
       * @param apkVersionCode The version code of the APK whose Deobfuscation File is being uploaded.
       * @param deobfuscationFileType The type of the deobfuscation file.
       * @return the request
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String deobfuscationFileType) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, apkVersionCode, deobfuscationFileType);
        initialize(result);
        return result;
      }

      /**
       * Uploads a new deobfuscation file and attaches to the specified APK.
       *
       * Create a request for the method "deobfuscationfiles.upload".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * <p>
       * This method should be used for uploading media content.
       * </p>
       *
       * @param packageName Unique identifier for the Android app.@param editId Unique identifier for this edit.@param apkVersionCode The version code of the APK whose Deobfuscation File is being uploaded.@param deobfuscationFileType The type of the deobfuscation file.
       * @param mediaContent The media HTTP content.
       * @return the request
       * @throws java.io.IOException if the initialization of the request fails
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String deobfuscationFileType, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, apkVersionCode, deobfuscationFileType, mediaContent);
        initialize(result);
        return result;
      }

      public class Upload extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.DeobfuscationFilesUploadResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}";

        /**
         * Uploads a new deobfuscation file and attaches to the specified APK.
         *
         * Create a request for the method "deobfuscationfiles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Unique identifier for the Android app.
         * @param editId Unique identifier for this edit.
         * @param apkVersionCode The version code of the APK whose Deobfuscation File is being uploaded.
         * @param deobfuscationFileType The type of the deobfuscation file.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String deobfuscationFileType) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.DeobfuscationFilesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.deobfuscationFileType = com.google.api.client.util.Preconditions.checkNotNull(deobfuscationFileType, "Required parameter deobfuscationFileType must be specified.");
        }

        /**
         * Uploads a new deobfuscation file and attaches to the specified APK.
         *
         * Create a request for the method "deobfuscationfiles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * <p>
         * This constructor should be used for uploading media content.
         * </p>
         *
         * @param packageName Unique identifier for the Android app.@param editId Unique identifier for this edit.@param apkVersionCode The version code of the APK whose Deobfuscation File is being uploaded.@param deobfuscationFileType The type of the deobfuscation file.
         * @param mediaContent The media HTTP content.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String deobfuscationFileType, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
          super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.DeobfuscationFilesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.deobfuscationFileType = com.google.api.client.util.Preconditions.checkNotNull(deobfuscationFileType, "Required parameter deobfuscationFileType must be specified.");
          com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
          initializeMediaUpload(mediaContent);
        }

        @Override
        public Upload set$Xgafv(java.lang.String $Xgafv) {
          return (Upload) super.set$Xgafv($Xgafv);
        }

        @Override
        public Upload setAccessToken(java.lang.String accessToken) {
          return (Upload) super.setAccessToken(accessToken);
        }

        @Override
        public Upload setAlt(java.lang.String alt) {
          return (Upload) super.setAlt(alt);
        }

        @Override
        public Upload setCallback(java.lang.String callback) {
          return (Upload) super.setCallback(callback);
        }

        @Override
        public Upload setFields(java.lang.String fields) {
          return (Upload) super.setFields(fields);
        }

        @Override
        public Upload setKey(java.lang.String key) {
          return (Upload) super.setKey(key);
        }

        @Override
        public Upload setOauthToken(java.lang.String oauthToken) {
          return (Upload) super.setOauthToken(oauthToken);
        }

        @Override
        public Upload setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Upload) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Upload setQuotaUser(java.lang.String quotaUser) {
          return (Upload) super.setQuotaUser(quotaUser);
        }

        @Override
        public Upload setUploadType(java.lang.String uploadType) {
          return (Upload) super.setUploadType(uploadType);
        }

        @Override
        public Upload setUploadProtocol(java.lang.String uploadProtocol) {
          return (Upload) super.setUploadProtocol(uploadProtocol);
        }

        /** Unique identifier for the Android app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Unique identifier for the Android app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Unique identifier for the Android app. */
        public Upload setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Unique identifier for this edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Unique identifier for this edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Unique identifier for this edit. */
        public Upload setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /** The version code of the APK whose Deobfuscation File is being uploaded. */
        @com.google.api.client.util.Key
        private java.lang.Integer apkVersionCode;

        /** The version code of the APK whose Deobfuscation File is being uploaded.
         */
        public java.lang.Integer getApkVersionCode() {
          return apkVersionCode;
        }

        /** The version code of the APK whose Deobfuscation File is being uploaded. */
        public Upload setApkVersionCode(java.lang.Integer apkVersionCode) {
          this.apkVersionCode = apkVersionCode;
          return this;
        }

        /** The type of the deobfuscation file. */
        @com.google.api.client.util.Key
        private java.lang.String deobfuscationFileType;

        /** The type of the deobfuscation file.
         */
        public java.lang.String getDeobfuscationFileType() {
          return deobfuscationFileType;
        }

        /** The type of the deobfuscation file. */
        public Upload setDeobfuscationFileType(java.lang.String deobfuscationFileType) {
          this.deobfuscationFileType = deobfuscationFileType;
          return this;
        }

        @Override
        public Upload set(String parameterName, Object value) {
          return (Upload) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Details collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Details.List request = androidpublisher.details().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Details details() {
      return new Details();
    }

    /**
     * The "details" collection of methods.
     */
    public class Details {

      /**
       * Gets details of an app.
       *
       * Create a request for the method "details.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        Get result = new Get(packageName, editId);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppDetails> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/details";

        /**
         * Gets details of an app.
         *
         * Create a request for the method "details.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.AppDetails.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Patches details of an app.
       *
       * Create a request for the method "details.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param content the {@link com.google.api.services.androidpublisher.model.AppDetails}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.AppDetails content) throws java.io.IOException {
        Patch result = new Patch(packageName, editId, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppDetails> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/details";

        /**
         * Patches details of an app.
         *
         * Create a request for the method "details.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param content the {@link com.google.api.services.androidpublisher.model.AppDetails}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.AppDetails content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.AppDetails.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Patch setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Updates details of an app.
       *
       * Create a request for the method "details.update".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param content the {@link com.google.api.services.androidpublisher.model.AppDetails}
       * @return the request
       */
      public Update update(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.AppDetails content) throws java.io.IOException {
        Update result = new Update(packageName, editId, content);
        initialize(result);
        return result;
      }

      public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.AppDetails> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/details";

        /**
         * Updates details of an app.
         *
         * Create a request for the method "details.update".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
         * <p> {@link
         * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param content the {@link com.google.api.services.androidpublisher.model.AppDetails}
         * @since 1.13
         */
        protected Update(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.AppDetails content) {
          super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.AppDetails.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public Update set$Xgafv(java.lang.String $Xgafv) {
          return (Update) super.set$Xgafv($Xgafv);
        }

        @Override
        public Update setAccessToken(java.lang.String accessToken) {
          return (Update) super.setAccessToken(accessToken);
        }

        @Override
        public Update setAlt(java.lang.String alt) {
          return (Update) super.setAlt(alt);
        }

        @Override
        public Update setCallback(java.lang.String callback) {
          return (Update) super.setCallback(callback);
        }

        @Override
        public Update setFields(java.lang.String fields) {
          return (Update) super.setFields(fields);
        }

        @Override
        public Update setKey(java.lang.String key) {
          return (Update) super.setKey(key);
        }

        @Override
        public Update setOauthToken(java.lang.String oauthToken) {
          return (Update) super.setOauthToken(oauthToken);
        }

        @Override
        public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Update) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Update setQuotaUser(java.lang.String quotaUser) {
          return (Update) super.setQuotaUser(quotaUser);
        }

        @Override
        public Update setUploadType(java.lang.String uploadType) {
          return (Update) super.setUploadType(uploadType);
        }

        @Override
        public Update setUploadProtocol(java.lang.String uploadProtocol) {
          return (Update) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Update setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Update setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Update set(String parameterName, Object value) {
          return (Update) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Expansionfiles collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Expansionfiles.List request = androidpublisher.expansionfiles().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Expansionfiles expansionfiles() {
      return new Expansionfiles();
    }

    /**
     * The "expansionfiles" collection of methods.
     */
    public class Expansionfiles {

      /**
       * Fetches the expansion file configuration for the specified APK.
       *
       * Create a request for the method "expansionfiles.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
       * @param expansionFileType The file type of the file configuration which is being read or modified.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType) throws java.io.IOException {
        Get result = new Get(packageName, editId, apkVersionCode, expansionFileType);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExpansionFile> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}";

        /**
         * Fetches the expansion file configuration for the specified APK.
         *
         * Create a request for the method "expansionfiles.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
         * @param expansionFileType The file type of the file configuration which is being read or modified.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ExpansionFile.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.expansionFileType = com.google.api.client.util.Preconditions.checkNotNull(expansionFileType, "Required parameter expansionFileType must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer apkVersionCode;

        /** The version code of the APK whose expansion file configuration is being read or modified.
         */
        public java.lang.Integer getApkVersionCode() {
          return apkVersionCode;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        public Get setApkVersionCode(java.lang.Integer apkVersionCode) {
          this.apkVersionCode = apkVersionCode;
          return this;
        }

        /** The file type of the file configuration which is being read or modified. */
        @com.google.api.client.util.Key
        private java.lang.String expansionFileType;

        /** The file type of the file configuration which is being read or modified.
         */
        public java.lang.String getExpansionFileType() {
          return expansionFileType;
        }

        /** The file type of the file configuration which is being read or modified. */
        public Get setExpansionFileType(java.lang.String expansionFileType) {
          this.expansionFileType = expansionFileType;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Patches the APK's expansion file configuration to reference another APK's expansion file. To add
       * a new expansion file use the Upload method.
       *
       * Create a request for the method "expansionfiles.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
       * @param expansionFileType The file type of the expansion file configuration which is being updated.
       * @param content the {@link com.google.api.services.androidpublisher.model.ExpansionFile}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.services.androidpublisher.model.ExpansionFile content) throws java.io.IOException {
        Patch result = new Patch(packageName, editId, apkVersionCode, expansionFileType, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExpansionFile> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}";

        /**
         * Patches the APK's expansion file configuration to reference another APK's expansion file. To
         * add a new expansion file use the Upload method.
         *
         * Create a request for the method "expansionfiles.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
         * @param expansionFileType The file type of the expansion file configuration which is being updated.
         * @param content the {@link com.google.api.services.androidpublisher.model.ExpansionFile}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.services.androidpublisher.model.ExpansionFile content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.ExpansionFile.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.expansionFileType = com.google.api.client.util.Preconditions.checkNotNull(expansionFileType, "Required parameter expansionFileType must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Patch setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer apkVersionCode;

        /** The version code of the APK whose expansion file configuration is being read or modified.
         */
        public java.lang.Integer getApkVersionCode() {
          return apkVersionCode;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        public Patch setApkVersionCode(java.lang.Integer apkVersionCode) {
          this.apkVersionCode = apkVersionCode;
          return this;
        }

        /** The file type of the expansion file configuration which is being updated. */
        @com.google.api.client.util.Key
        private java.lang.String expansionFileType;

        /** The file type of the expansion file configuration which is being updated.
         */
        public java.lang.String getExpansionFileType() {
          return expansionFileType;
        }

        /** The file type of the expansion file configuration which is being updated. */
        public Patch setExpansionFileType(java.lang.String expansionFileType) {
          this.expansionFileType = expansionFileType;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Updates the APK's expansion file configuration to reference another APK's expansion file. To add
       * a new expansion file use the Upload method.
       *
       * Create a request for the method "expansionfiles.update".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
       * @param expansionFileType The file type of the file configuration which is being read or modified.
       * @param content the {@link com.google.api.services.androidpublisher.model.ExpansionFile}
       * @return the request
       */
      public Update update(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.services.androidpublisher.model.ExpansionFile content) throws java.io.IOException {
        Update result = new Update(packageName, editId, apkVersionCode, expansionFileType, content);
        initialize(result);
        return result;
      }

      public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExpansionFile> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}";

        /**
         * Updates the APK's expansion file configuration to reference another APK's expansion file. To
         * add a new expansion file use the Upload method.
         *
         * Create a request for the method "expansionfiles.update".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
         * <p> {@link
         * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
         * @param expansionFileType The file type of the file configuration which is being read or modified.
         * @param content the {@link com.google.api.services.androidpublisher.model.ExpansionFile}
         * @since 1.13
         */
        protected Update(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.services.androidpublisher.model.ExpansionFile content) {
          super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.ExpansionFile.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.expansionFileType = com.google.api.client.util.Preconditions.checkNotNull(expansionFileType, "Required parameter expansionFileType must be specified.");
        }

        @Override
        public Update set$Xgafv(java.lang.String $Xgafv) {
          return (Update) super.set$Xgafv($Xgafv);
        }

        @Override
        public Update setAccessToken(java.lang.String accessToken) {
          return (Update) super.setAccessToken(accessToken);
        }

        @Override
        public Update setAlt(java.lang.String alt) {
          return (Update) super.setAlt(alt);
        }

        @Override
        public Update setCallback(java.lang.String callback) {
          return (Update) super.setCallback(callback);
        }

        @Override
        public Update setFields(java.lang.String fields) {
          return (Update) super.setFields(fields);
        }

        @Override
        public Update setKey(java.lang.String key) {
          return (Update) super.setKey(key);
        }

        @Override
        public Update setOauthToken(java.lang.String oauthToken) {
          return (Update) super.setOauthToken(oauthToken);
        }

        @Override
        public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Update) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Update setQuotaUser(java.lang.String quotaUser) {
          return (Update) super.setQuotaUser(quotaUser);
        }

        @Override
        public Update setUploadType(java.lang.String uploadType) {
          return (Update) super.setUploadType(uploadType);
        }

        @Override
        public Update setUploadProtocol(java.lang.String uploadProtocol) {
          return (Update) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Update setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Update setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer apkVersionCode;

        /** The version code of the APK whose expansion file configuration is being read or modified.
         */
        public java.lang.Integer getApkVersionCode() {
          return apkVersionCode;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        public Update setApkVersionCode(java.lang.Integer apkVersionCode) {
          this.apkVersionCode = apkVersionCode;
          return this;
        }

        /** The file type of the file configuration which is being read or modified. */
        @com.google.api.client.util.Key
        private java.lang.String expansionFileType;

        /** The file type of the file configuration which is being read or modified.
         */
        public java.lang.String getExpansionFileType() {
          return expansionFileType;
        }

        /** The file type of the file configuration which is being read or modified. */
        public Update setExpansionFileType(java.lang.String expansionFileType) {
          this.expansionFileType = expansionFileType;
          return this;
        }

        @Override
        public Update set(String parameterName, Object value) {
          return (Update) super.set(parameterName, value);
        }
      }
      /**
       * Uploads a new expansion file and attaches to the specified APK.
       *
       * Create a request for the method "expansionfiles.upload".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
       * @param expansionFileType The file type of the expansion file configuration which is being updated.
       * @return the request
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, apkVersionCode, expansionFileType);
        initialize(result);
        return result;
      }

      /**
       * Uploads a new expansion file and attaches to the specified APK.
       *
       * Create a request for the method "expansionfiles.upload".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * <p>
       * This method should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.@param editId Identifier of the edit.@param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.@param expansionFileType The file type of the expansion file configuration which is being updated.
       * @param mediaContent The media HTTP content.
       * @return the request
       * @throws java.io.IOException if the initialization of the request fails
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, apkVersionCode, expansionFileType, mediaContent);
        initialize(result);
        return result;
      }

      public class Upload extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExpansionFilesUploadResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}";

        /**
         * Uploads a new expansion file and attaches to the specified APK.
         *
         * Create a request for the method "expansionfiles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.
         * @param expansionFileType The file type of the expansion file configuration which is being updated.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.ExpansionFilesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.expansionFileType = com.google.api.client.util.Preconditions.checkNotNull(expansionFileType, "Required parameter expansionFileType must be specified.");
        }

        /**
         * Uploads a new expansion file and attaches to the specified APK.
         *
         * Create a request for the method "expansionfiles.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * <p>
         * This constructor should be used for uploading media content.
         * </p>
         *
         * @param packageName Package name of the app.@param editId Identifier of the edit.@param apkVersionCode The version code of the APK whose expansion file configuration is being read or modified.@param expansionFileType The file type of the expansion file configuration which is being updated.
         * @param mediaContent The media HTTP content.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.Integer apkVersionCode, java.lang.String expansionFileType, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
          super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.ExpansionFilesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.apkVersionCode = com.google.api.client.util.Preconditions.checkNotNull(apkVersionCode, "Required parameter apkVersionCode must be specified.");
          this.expansionFileType = com.google.api.client.util.Preconditions.checkNotNull(expansionFileType, "Required parameter expansionFileType must be specified.");
          com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
          initializeMediaUpload(mediaContent);
        }

        @Override
        public Upload set$Xgafv(java.lang.String $Xgafv) {
          return (Upload) super.set$Xgafv($Xgafv);
        }

        @Override
        public Upload setAccessToken(java.lang.String accessToken) {
          return (Upload) super.setAccessToken(accessToken);
        }

        @Override
        public Upload setAlt(java.lang.String alt) {
          return (Upload) super.setAlt(alt);
        }

        @Override
        public Upload setCallback(java.lang.String callback) {
          return (Upload) super.setCallback(callback);
        }

        @Override
        public Upload setFields(java.lang.String fields) {
          return (Upload) super.setFields(fields);
        }

        @Override
        public Upload setKey(java.lang.String key) {
          return (Upload) super.setKey(key);
        }

        @Override
        public Upload setOauthToken(java.lang.String oauthToken) {
          return (Upload) super.setOauthToken(oauthToken);
        }

        @Override
        public Upload setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Upload) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Upload setQuotaUser(java.lang.String quotaUser) {
          return (Upload) super.setQuotaUser(quotaUser);
        }

        @Override
        public Upload setUploadType(java.lang.String uploadType) {
          return (Upload) super.setUploadType(uploadType);
        }

        @Override
        public Upload setUploadProtocol(java.lang.String uploadProtocol) {
          return (Upload) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Upload setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Upload setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer apkVersionCode;

        /** The version code of the APK whose expansion file configuration is being read or modified.
         */
        public java.lang.Integer getApkVersionCode() {
          return apkVersionCode;
        }

        /**
         * The version code of the APK whose expansion file configuration is being read or modified.
         */
        public Upload setApkVersionCode(java.lang.Integer apkVersionCode) {
          this.apkVersionCode = apkVersionCode;
          return this;
        }

        /** The file type of the expansion file configuration which is being updated. */
        @com.google.api.client.util.Key
        private java.lang.String expansionFileType;

        /** The file type of the expansion file configuration which is being updated.
         */
        public java.lang.String getExpansionFileType() {
          return expansionFileType;
        }

        /** The file type of the expansion file configuration which is being updated. */
        public Upload setExpansionFileType(java.lang.String expansionFileType) {
          this.expansionFileType = expansionFileType;
          return this;
        }

        @Override
        public Upload set(String parameterName, Object value) {
          return (Upload) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Images collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Images.List request = androidpublisher.images().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Images images() {
      return new Images();
    }

    /**
     * The "images" collection of methods.
     */
    public class Images {

      /**
       * Deletes the image (specified by id) from the edit.
       *
       * Create a request for the method "images.delete".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       * @param imageType Type of the Image.
       * @param imageId Unique identifier an image within the set of images attached to this edit.
       * @return the request
       */
      public Delete delete(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType, java.lang.String imageId) throws java.io.IOException {
        Delete result = new Delete(packageName, editId, language, imageType, imageId);
        initialize(result);
        return result;
      }

      public class Delete extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}";

        /**
         * Deletes the image (specified by id) from the edit.
         *
         * Create a request for the method "images.delete".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         * @param imageType Type of the Image.
         * @param imageId Unique identifier an image within the set of images attached to this edit.
         * @since 1.13
         */
        protected Delete(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType, java.lang.String imageId) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
          this.imageType = com.google.api.client.util.Preconditions.checkNotNull(imageType, "Required parameter imageType must be specified.");
          this.imageId = com.google.api.client.util.Preconditions.checkNotNull(imageId, "Required parameter imageId must be specified.");
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

        @Override
        public Delete setAlt(java.lang.String alt) {
          return (Delete) super.setAlt(alt);
        }

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @Override
        public Delete setFields(java.lang.String fields) {
          return (Delete) super.setFields(fields);
        }

        @Override
        public Delete setKey(java.lang.String key) {
          return (Delete) super.setKey(key);
        }

        @Override
        public Delete setOauthToken(java.lang.String oauthToken) {
          return (Delete) super.setOauthToken(oauthToken);
        }

        @Override
        public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Delete) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Delete setQuotaUser(java.lang.String quotaUser) {
          return (Delete) super.setQuotaUser(quotaUser);
        }

        @Override
        public Delete setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Delete setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Delete setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        public Delete setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        /** Type of the Image. */
        @com.google.api.client.util.Key
        private java.lang.String imageType;

        /** Type of the Image.
         */
        public java.lang.String getImageType() {
          return imageType;
        }

        /** Type of the Image. */
        public Delete setImageType(java.lang.String imageType) {
          this.imageType = imageType;
          return this;
        }

        /** Unique identifier an image within the set of images attached to this edit. */
        @com.google.api.client.util.Key
        private java.lang.String imageId;

        /** Unique identifier an image within the set of images attached to this edit.
         */
        public java.lang.String getImageId() {
          return imageId;
        }

        /** Unique identifier an image within the set of images attached to this edit. */
        public Delete setImageId(java.lang.String imageId) {
          this.imageId = imageId;
          return this;
        }

        @Override
        public Delete set(String parameterName, Object value) {
          return (Delete) super.set(parameterName, value);
        }
      }
      /**
       * Deletes all images for the specified language and image type. Returns an empty response if no
       * images are found.
       *
       * Create a request for the method "images.deleteall".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Deleteall#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.
       * @param imageType Type of the Image. Providing an image type that refers to no images is a no-op.
       * @return the request
       */
      public Deleteall deleteall(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) throws java.io.IOException {
        Deleteall result = new Deleteall(packageName, editId, language, imageType);
        initialize(result);
        return result;
      }

      public class Deleteall extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ImagesDeleteAllResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}";

        /**
         * Deletes all images for the specified language and image type. Returns an empty response if no
         * images are found.
         *
         * Create a request for the method "images.deleteall".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Deleteall#execute()} method to invoke the remote
         * operation. <p> {@link
         * Deleteall#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.
         * @param imageType Type of the Image. Providing an image type that refers to no images is a no-op.
         * @since 1.13
         */
        protected Deleteall(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, com.google.api.services.androidpublisher.model.ImagesDeleteAllResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
          this.imageType = com.google.api.client.util.Preconditions.checkNotNull(imageType, "Required parameter imageType must be specified.");
        }

        @Override
        public Deleteall set$Xgafv(java.lang.String $Xgafv) {
          return (Deleteall) super.set$Xgafv($Xgafv);
        }

        @Override
        public Deleteall setAccessToken(java.lang.String accessToken) {
          return (Deleteall) super.setAccessToken(accessToken);
        }

        @Override
        public Deleteall setAlt(java.lang.String alt) {
          return (Deleteall) super.setAlt(alt);
        }

        @Override
        public Deleteall setCallback(java.lang.String callback) {
          return (Deleteall) super.setCallback(callback);
        }

        @Override
        public Deleteall setFields(java.lang.String fields) {
          return (Deleteall) super.setFields(fields);
        }

        @Override
        public Deleteall setKey(java.lang.String key) {
          return (Deleteall) super.setKey(key);
        }

        @Override
        public Deleteall setOauthToken(java.lang.String oauthToken) {
          return (Deleteall) super.setOauthToken(oauthToken);
        }

        @Override
        public Deleteall setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Deleteall) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Deleteall setQuotaUser(java.lang.String quotaUser) {
          return (Deleteall) super.setQuotaUser(quotaUser);
        }

        @Override
        public Deleteall setUploadType(java.lang.String uploadType) {
          return (Deleteall) super.setUploadType(uploadType);
        }

        @Override
        public Deleteall setUploadProtocol(java.lang.String uploadProtocol) {
          return (Deleteall) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Deleteall setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Deleteall setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). Providing a language that is not supported by the App is a no-op.
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       Providing a language that is not supported by the App is a no-op.
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). Providing a language that is not supported by the App is a no-op.
         */
        public Deleteall setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        /** Type of the Image. Providing an image type that refers to no images is a no-op. */
        @com.google.api.client.util.Key
        private java.lang.String imageType;

        /** Type of the Image. Providing an image type that refers to no images is a no-op.
         */
        public java.lang.String getImageType() {
          return imageType;
        }

        /** Type of the Image. Providing an image type that refers to no images is a no-op. */
        public Deleteall setImageType(java.lang.String imageType) {
          this.imageType = imageType;
          return this;
        }

        @Override
        public Deleteall set(String parameterName, Object value) {
          return (Deleteall) super.set(parameterName, value);
        }
      }
      /**
       * Lists all images. The response may be empty.
       *
       * Create a request for the method "images.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German). There
       *        must be a store listing for the specified language.
       * @param imageType Type of the Image. Providing an image type that refers to no images will return an empty response.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) throws java.io.IOException {
        List result = new List(packageName, editId, language, imageType);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ImagesListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}";

        /**
         * Lists all images. The response may be empty.
         *
         * Create a request for the method "images.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German). There
       *        must be a store listing for the specified language.
         * @param imageType Type of the Image. Providing an image type that refers to no images will return an empty response.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ImagesListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
          this.imageType = com.google.api.client.util.Preconditions.checkNotNull(imageType, "Required parameter imageType must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public List setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). There must be a store listing for the specified language.
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German). There
       must be a store listing for the specified language.
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). There must be a store listing for the specified language.
         */
        public List setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        /**
         * Type of the Image. Providing an image type that refers to no images will return an empty
         * response.
         */
        @com.google.api.client.util.Key
        private java.lang.String imageType;

        /** Type of the Image. Providing an image type that refers to no images will return an empty response.
         */
        public java.lang.String getImageType() {
          return imageType;
        }

        /**
         * Type of the Image. Providing an image type that refers to no images will return an empty
         * response.
         */
        public List setImageType(java.lang.String imageType) {
          this.imageType = imageType;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Uploads an image of the specified language and image type, and adds to the edit.
       *
       * Create a request for the method "images.upload".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.
       * @param imageType Type of the Image.
       * @return the request
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, language, imageType);
        initialize(result);
        return result;
      }

      /**
       * Uploads an image of the specified language and image type, and adds to the edit.
       *
       * Create a request for the method "images.upload".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
       *
       * <p>
       * This method should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.@param editId Identifier of the edit.@param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.@param imageType Type of the Image.
       * @param mediaContent The media HTTP content.
       * @return the request
       * @throws java.io.IOException if the initialization of the request fails
       */
      public Upload upload(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
        Upload result = new Upload(packageName, editId, language, imageType, mediaContent);
        initialize(result);
        return result;
      }

      public class Upload extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ImagesUploadResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}";

        /**
         * Uploads an image of the specified language and image type, and adds to the edit.
         *
         * Create a request for the method "images.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.
         * @param imageType Type of the Image.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.ImagesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
          this.imageType = com.google.api.client.util.Preconditions.checkNotNull(imageType, "Required parameter imageType must be specified.");
        }

        /**
         * Uploads an image of the specified language and image type, and adds to the edit.
         *
         * Create a request for the method "images.upload".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Upload#execute()} method to invoke the remote operation.
         * <p> {@link
         * Upload#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * <p>
         * This constructor should be used for uploading media content.
         * </p>
         *
         * @param packageName Package name of the app.@param editId Identifier of the edit.@param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       *        Providing a language that is not supported by the App is a no-op.@param imageType Type of the Image.
         * @param mediaContent The media HTTP content.
         * @since 1.13
         */
        protected Upload(java.lang.String packageName, java.lang.String editId, java.lang.String language, java.lang.String imageType, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
          super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.ImagesUploadResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
          this.imageType = com.google.api.client.util.Preconditions.checkNotNull(imageType, "Required parameter imageType must be specified.");
          com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
          initializeMediaUpload(mediaContent);
        }

        @Override
        public Upload set$Xgafv(java.lang.String $Xgafv) {
          return (Upload) super.set$Xgafv($Xgafv);
        }

        @Override
        public Upload setAccessToken(java.lang.String accessToken) {
          return (Upload) super.setAccessToken(accessToken);
        }

        @Override
        public Upload setAlt(java.lang.String alt) {
          return (Upload) super.setAlt(alt);
        }

        @Override
        public Upload setCallback(java.lang.String callback) {
          return (Upload) super.setCallback(callback);
        }

        @Override
        public Upload setFields(java.lang.String fields) {
          return (Upload) super.setFields(fields);
        }

        @Override
        public Upload setKey(java.lang.String key) {
          return (Upload) super.setKey(key);
        }

        @Override
        public Upload setOauthToken(java.lang.String oauthToken) {
          return (Upload) super.setOauthToken(oauthToken);
        }

        @Override
        public Upload setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Upload) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Upload setQuotaUser(java.lang.String quotaUser) {
          return (Upload) super.setQuotaUser(quotaUser);
        }

        @Override
        public Upload setUploadType(java.lang.String uploadType) {
          return (Upload) super.setUploadType(uploadType);
        }

        @Override
        public Upload setUploadProtocol(java.lang.String uploadProtocol) {
          return (Upload) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Upload setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Upload setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). Providing a language that is not supported by the App is a no-op.
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       Providing a language that is not supported by the App is a no-op.
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German). Providing a language that is not supported by the App is a no-op.
         */
        public Upload setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        /** Type of the Image. */
        @com.google.api.client.util.Key
        private java.lang.String imageType;

        /** Type of the Image.
         */
        public java.lang.String getImageType() {
          return imageType;
        }

        /** Type of the Image. */
        public Upload setImageType(java.lang.String imageType) {
          this.imageType = imageType;
          return this;
        }

        @Override
        public Upload set(String parameterName, Object value) {
          return (Upload) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Listings collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Listings.List request = androidpublisher.listings().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Listings listings() {
      return new Listings();
    }

    /**
     * The "listings" collection of methods.
     */
    public class Listings {

      /**
       * Deletes a localized store listing.
       *
       * Create a request for the method "listings.delete".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       * @return the request
       */
      public Delete delete(java.lang.String packageName, java.lang.String editId, java.lang.String language) throws java.io.IOException {
        Delete result = new Delete(packageName, editId, language);
        initialize(result);
        return result;
      }

      public class Delete extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}";

        /**
         * Deletes a localized store listing.
         *
         * Create a request for the method "listings.delete".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         * @since 1.13
         */
        protected Delete(java.lang.String packageName, java.lang.String editId, java.lang.String language) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

        @Override
        public Delete setAlt(java.lang.String alt) {
          return (Delete) super.setAlt(alt);
        }

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @Override
        public Delete setFields(java.lang.String fields) {
          return (Delete) super.setFields(fields);
        }

        @Override
        public Delete setKey(java.lang.String key) {
          return (Delete) super.setKey(key);
        }

        @Override
        public Delete setOauthToken(java.lang.String oauthToken) {
          return (Delete) super.setOauthToken(oauthToken);
        }

        @Override
        public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Delete) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Delete setQuotaUser(java.lang.String quotaUser) {
          return (Delete) super.setQuotaUser(quotaUser);
        }

        @Override
        public Delete setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Delete setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Delete setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        public Delete setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        @Override
        public Delete set(String parameterName, Object value) {
          return (Delete) super.set(parameterName, value);
        }
      }
      /**
       * Deletes all store listings.
       *
       * Create a request for the method "listings.deleteall".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Deleteall#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public Deleteall deleteall(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        Deleteall result = new Deleteall(packageName, editId);
        initialize(result);
        return result;
      }

      public class Deleteall extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings";

        /**
         * Deletes all store listings.
         *
         * Create a request for the method "listings.deleteall".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Deleteall#execute()} method to invoke the remote
         * operation. <p> {@link
         * Deleteall#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected Deleteall(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public Deleteall set$Xgafv(java.lang.String $Xgafv) {
          return (Deleteall) super.set$Xgafv($Xgafv);
        }

        @Override
        public Deleteall setAccessToken(java.lang.String accessToken) {
          return (Deleteall) super.setAccessToken(accessToken);
        }

        @Override
        public Deleteall setAlt(java.lang.String alt) {
          return (Deleteall) super.setAlt(alt);
        }

        @Override
        public Deleteall setCallback(java.lang.String callback) {
          return (Deleteall) super.setCallback(callback);
        }

        @Override
        public Deleteall setFields(java.lang.String fields) {
          return (Deleteall) super.setFields(fields);
        }

        @Override
        public Deleteall setKey(java.lang.String key) {
          return (Deleteall) super.setKey(key);
        }

        @Override
        public Deleteall setOauthToken(java.lang.String oauthToken) {
          return (Deleteall) super.setOauthToken(oauthToken);
        }

        @Override
        public Deleteall setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Deleteall) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Deleteall setQuotaUser(java.lang.String quotaUser) {
          return (Deleteall) super.setQuotaUser(quotaUser);
        }

        @Override
        public Deleteall setUploadType(java.lang.String uploadType) {
          return (Deleteall) super.setUploadType(uploadType);
        }

        @Override
        public Deleteall setUploadProtocol(java.lang.String uploadProtocol) {
          return (Deleteall) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Deleteall setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Deleteall setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Deleteall set(String parameterName, Object value) {
          return (Deleteall) super.set(parameterName, value);
        }
      }
      /**
       * Gets a localized store listing.
       *
       * Create a request for the method "listings.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId, java.lang.String language) throws java.io.IOException {
        Get result = new Get(packageName, editId, language);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Listing> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}";

        /**
         * Gets a localized store listing.
         *
         * Create a request for the method "listings.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId, java.lang.String language) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Listing.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        public Get setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists all localized store listings.
       *
       * Create a request for the method "listings.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        List result = new List(packageName, editId);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListingsListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings";

        /**
         * Lists all localized store listings.
         *
         * Create a request for the method "listings.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListingsListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public List setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Patches a localized store listing.
       *
       * Create a request for the method "listings.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       * @param content the {@link com.google.api.services.androidpublisher.model.Listing}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String editId, java.lang.String language, com.google.api.services.androidpublisher.model.Listing content) throws java.io.IOException {
        Patch result = new Patch(packageName, editId, language, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Listing> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}";

        /**
         * Patches a localized store listing.
         *
         * Create a request for the method "listings.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         * @param content the {@link com.google.api.services.androidpublisher.model.Listing}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String editId, java.lang.String language, com.google.api.services.androidpublisher.model.Listing content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.Listing.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Patch setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        public Patch setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Creates or updates a localized store listing.
       *
       * Create a request for the method "listings.update".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
       * @param content the {@link com.google.api.services.androidpublisher.model.Listing}
       * @return the request
       */
      public Update update(java.lang.String packageName, java.lang.String editId, java.lang.String language, com.google.api.services.androidpublisher.model.Listing content) throws java.io.IOException {
        Update result = new Update(packageName, editId, language, content);
        initialize(result);
        return result;
      }

      public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Listing> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}";

        /**
         * Creates or updates a localized store listing.
         *
         * Create a request for the method "listings.update".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
         * <p> {@link
         * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param language Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         * @param content the {@link com.google.api.services.androidpublisher.model.Listing}
         * @since 1.13
         */
        protected Update(java.lang.String packageName, java.lang.String editId, java.lang.String language, com.google.api.services.androidpublisher.model.Listing content) {
          super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.Listing.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.language = com.google.api.client.util.Preconditions.checkNotNull(language, "Required parameter language must be specified.");
        }

        @Override
        public Update set$Xgafv(java.lang.String $Xgafv) {
          return (Update) super.set$Xgafv($Xgafv);
        }

        @Override
        public Update setAccessToken(java.lang.String accessToken) {
          return (Update) super.setAccessToken(accessToken);
        }

        @Override
        public Update setAlt(java.lang.String alt) {
          return (Update) super.setAlt(alt);
        }

        @Override
        public Update setCallback(java.lang.String callback) {
          return (Update) super.setCallback(callback);
        }

        @Override
        public Update setFields(java.lang.String fields) {
          return (Update) super.setFields(fields);
        }

        @Override
        public Update setKey(java.lang.String key) {
          return (Update) super.setKey(key);
        }

        @Override
        public Update setOauthToken(java.lang.String oauthToken) {
          return (Update) super.setOauthToken(oauthToken);
        }

        @Override
        public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Update) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Update setQuotaUser(java.lang.String quotaUser) {
          return (Update) super.setQuotaUser(quotaUser);
        }

        @Override
        public Update setUploadType(java.lang.String uploadType) {
          return (Update) super.setUploadType(uploadType);
        }

        @Override
        public Update setUploadProtocol(java.lang.String uploadProtocol) {
          return (Update) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Update setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Update setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        @com.google.api.client.util.Key
        private java.lang.String language;

        /** Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian German).
         */
        public java.lang.String getLanguage() {
          return language;
        }

        /**
         * Language localization code (a BCP-47 language tag; for example, "de-AT" for Austrian
         * German).
         */
        public Update setLanguage(java.lang.String language) {
          this.language = language;
          return this;
        }

        @Override
        public Update set(String parameterName, Object value) {
          return (Update) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Testers collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Testers.List request = androidpublisher.testers().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Testers testers() {
      return new Testers();
    }

    /**
     * The "testers" collection of methods.
     */
    public class Testers {

      /**
       * Gets testers. Note: Testers resource does not support email lists.
       *
       * Create a request for the method "testers.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track The track to read from.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId, java.lang.String track) throws java.io.IOException {
        Get result = new Get(packageName, editId, track);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Testers> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}";

        /**
         * Gets testers. Note: Testers resource does not support email lists.
         *
         * Create a request for the method "testers.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track The track to read from.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId, java.lang.String track) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Testers.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /** The track to read from. */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** The track to read from.
         */
        public java.lang.String getTrack() {
          return track;
        }

        /** The track to read from. */
        public Get setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Patches testers. Note: Testers resource does not support email lists.
       *
       * Create a request for the method "testers.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track The track to update.
       * @param content the {@link com.google.api.services.androidpublisher.model.Testers}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Testers content) throws java.io.IOException {
        Patch result = new Patch(packageName, editId, track, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Testers> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}";

        /**
         * Patches testers. Note: Testers resource does not support email lists.
         *
         * Create a request for the method "testers.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track The track to update.
         * @param content the {@link com.google.api.services.androidpublisher.model.Testers}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Testers content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.Testers.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Patch setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /** The track to update. */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** The track to update.
         */
        public java.lang.String getTrack() {
          return track;
        }

        /** The track to update. */
        public Patch setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Updates testers. Note: Testers resource does not support email lists.
       *
       * Create a request for the method "testers.update".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track The track to update.
       * @param content the {@link com.google.api.services.androidpublisher.model.Testers}
       * @return the request
       */
      public Update update(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Testers content) throws java.io.IOException {
        Update result = new Update(packageName, editId, track, content);
        initialize(result);
        return result;
      }

      public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Testers> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}";

        /**
         * Updates testers. Note: Testers resource does not support email lists.
         *
         * Create a request for the method "testers.update".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
         * <p> {@link
         * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track The track to update.
         * @param content the {@link com.google.api.services.androidpublisher.model.Testers}
         * @since 1.13
         */
        protected Update(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Testers content) {
          super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.Testers.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public Update set$Xgafv(java.lang.String $Xgafv) {
          return (Update) super.set$Xgafv($Xgafv);
        }

        @Override
        public Update setAccessToken(java.lang.String accessToken) {
          return (Update) super.setAccessToken(accessToken);
        }

        @Override
        public Update setAlt(java.lang.String alt) {
          return (Update) super.setAlt(alt);
        }

        @Override
        public Update setCallback(java.lang.String callback) {
          return (Update) super.setCallback(callback);
        }

        @Override
        public Update setFields(java.lang.String fields) {
          return (Update) super.setFields(fields);
        }

        @Override
        public Update setKey(java.lang.String key) {
          return (Update) super.setKey(key);
        }

        @Override
        public Update setOauthToken(java.lang.String oauthToken) {
          return (Update) super.setOauthToken(oauthToken);
        }

        @Override
        public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Update) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Update setQuotaUser(java.lang.String quotaUser) {
          return (Update) super.setQuotaUser(quotaUser);
        }

        @Override
        public Update setUploadType(java.lang.String uploadType) {
          return (Update) super.setUploadType(uploadType);
        }

        @Override
        public Update setUploadProtocol(java.lang.String uploadProtocol) {
          return (Update) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Update setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Update setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /** The track to update. */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** The track to update.
         */
        public java.lang.String getTrack() {
          return track;
        }

        /** The track to update. */
        public Update setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Update set(String parameterName, Object value) {
          return (Update) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Tracks collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Tracks.List request = androidpublisher.tracks().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Tracks tracks() {
      return new Tracks();
    }

    /**
     * The "tracks" collection of methods.
     */
    public class Tracks {

      /**
       * Creates a new track.
       *
       * Create a request for the method "tracks.create".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. Package name of the app.
       * @param editId Required. Identifier of the edit.
       * @param content the {@link com.google.api.services.androidpublisher.model.TrackConfig}
       * @return the request
       */
      public Create create(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.TrackConfig content) throws java.io.IOException {
        Create result = new Create(packageName, editId, content);
        initialize(result);
        return result;
      }

      public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Track> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks";

        /**
         * Creates a new track.
         *
         * Create a request for the method "tracks.create".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. Package name of the app.
         * @param editId Required. Identifier of the edit.
         * @param content the {@link com.google.api.services.androidpublisher.model.TrackConfig}
         * @since 1.13
         */
        protected Create(java.lang.String packageName, java.lang.String editId, com.google.api.services.androidpublisher.model.TrackConfig content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Track.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

        @Override
        public Create setAlt(java.lang.String alt) {
          return (Create) super.setAlt(alt);
        }

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

        @Override
        public Create setFields(java.lang.String fields) {
          return (Create) super.setFields(fields);
        }

        @Override
        public Create setKey(java.lang.String key) {
          return (Create) super.setKey(key);
        }

        @Override
        public Create setOauthToken(java.lang.String oauthToken) {
          return (Create) super.setOauthToken(oauthToken);
        }

        @Override
        public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Create) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Create setQuotaUser(java.lang.String quotaUser) {
          return (Create) super.setQuotaUser(quotaUser);
        }

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. Package name of the app. */
        public Create setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Required. Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Required. Identifier of the edit. */
        public Create setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Gets a track.
       *
       * Create a request for the method "tracks.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String editId, java.lang.String track) throws java.io.IOException {
        Get result = new Get(packageName, editId, track);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Track> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}";

        /**
         * Gets a track.
         *
         * Create a request for the method "tracks.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String editId, java.lang.String track) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Track.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Get setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** Identifier of the track. [More on track name](https://developers.google.com/android-
       publisher/tracks#ff-track-name)
         */
        public java.lang.String getTrack() {
          return track;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        public Get setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists all tracks.
       *
       * Create a request for the method "tracks.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.String editId) throws java.io.IOException {
        List result = new List(packageName, editId);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.TracksListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks";

        /**
         * Lists all tracks.
         *
         * Create a request for the method "tracks.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.String editId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.TracksListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public List setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Patches a track.
       *
       * Create a request for the method "tracks.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
       * @param content the {@link com.google.api.services.androidpublisher.model.Track}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Track content) throws java.io.IOException {
        Patch result = new Patch(packageName, editId, track, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Track> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}";

        /**
         * Patches a track.
         *
         * Create a request for the method "tracks.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
         * @param content the {@link com.google.api.services.androidpublisher.model.Track}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Track content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.Track.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Patch setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** Identifier of the track. [More on track name](https://developers.google.com/android-
       publisher/tracks#ff-track-name)
         */
        public java.lang.String getTrack() {
          return track;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        public Patch setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Updates a track.
       *
       * Create a request for the method "tracks.update".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param editId Identifier of the edit.
       * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
       * @param content the {@link com.google.api.services.androidpublisher.model.Track}
       * @return the request
       */
      public Update update(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Track content) throws java.io.IOException {
        Update result = new Update(packageName, editId, track, content);
        initialize(result);
        return result;
      }

      public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Track> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}";

        /**
         * Updates a track.
         *
         * Create a request for the method "tracks.update".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
         * <p> {@link
         * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param editId Identifier of the edit.
         * @param track Identifier of the track. [More on track name](https://developers.google.com/android-
       *        publisher/tracks#ff-track-name)
         * @param content the {@link com.google.api.services.androidpublisher.model.Track}
         * @since 1.13
         */
        protected Update(java.lang.String packageName, java.lang.String editId, java.lang.String track, com.google.api.services.androidpublisher.model.Track content) {
          super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.Track.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.editId = com.google.api.client.util.Preconditions.checkNotNull(editId, "Required parameter editId must be specified.");
          this.track = com.google.api.client.util.Preconditions.checkNotNull(track, "Required parameter track must be specified.");
        }

        @Override
        public Update set$Xgafv(java.lang.String $Xgafv) {
          return (Update) super.set$Xgafv($Xgafv);
        }

        @Override
        public Update setAccessToken(java.lang.String accessToken) {
          return (Update) super.setAccessToken(accessToken);
        }

        @Override
        public Update setAlt(java.lang.String alt) {
          return (Update) super.setAlt(alt);
        }

        @Override
        public Update setCallback(java.lang.String callback) {
          return (Update) super.setCallback(callback);
        }

        @Override
        public Update setFields(java.lang.String fields) {
          return (Update) super.setFields(fields);
        }

        @Override
        public Update setKey(java.lang.String key) {
          return (Update) super.setKey(key);
        }

        @Override
        public Update setOauthToken(java.lang.String oauthToken) {
          return (Update) super.setOauthToken(oauthToken);
        }

        @Override
        public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Update) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Update setQuotaUser(java.lang.String quotaUser) {
          return (Update) super.setQuotaUser(quotaUser);
        }

        @Override
        public Update setUploadType(java.lang.String uploadType) {
          return (Update) super.setUploadType(uploadType);
        }

        @Override
        public Update setUploadProtocol(java.lang.String uploadProtocol) {
          return (Update) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Update setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Identifier of the edit. */
        @com.google.api.client.util.Key
        private java.lang.String editId;

        /** Identifier of the edit.
         */
        public java.lang.String getEditId() {
          return editId;
        }

        /** Identifier of the edit. */
        public Update setEditId(java.lang.String editId) {
          this.editId = editId;
          return this;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        @com.google.api.client.util.Key
        private java.lang.String track;

        /** Identifier of the track. [More on track name](https://developers.google.com/android-
       publisher/tracks#ff-track-name)
         */
        public java.lang.String getTrack() {
          return track;
        }

        /**
         * Identifier of the track. [More on track name](https://developers.google.com/android-
         * publisher/tracks#ff-track-name)
         */
        public Update setTrack(java.lang.String track) {
          this.track = track;
          return this;
        }

        @Override
        public Update set(String parameterName, Object value) {
          return (Update) super.set(parameterName, value);
        }
      }

    }
  }

  /**
   * An accessor for creating requests from the Externaltransactions collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Externaltransactions.List request = androidpublisher.externaltransactions().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Externaltransactions externaltransactions() {
    return new Externaltransactions();
  }

  /**
   * The "externaltransactions" collection of methods.
   */
  public class Externaltransactions {

    /**
     * Creates a new external transaction.
     *
     * Create a request for the method "externaltransactions.createexternaltransaction".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Createexternaltransaction#execute()} method to invoke the
     * remote operation.
     *
     * @param parent Required. The parent resource where this external transaction will be created. Format:
     *        applications/{package_name}
     * @param content the {@link com.google.api.services.androidpublisher.model.ExternalTransaction}
     * @return the request
     */
    public Createexternaltransaction createexternaltransaction(java.lang.String parent, com.google.api.services.androidpublisher.model.ExternalTransaction content) throws java.io.IOException {
      Createexternaltransaction result = new Createexternaltransaction(parent, content);
      initialize(result);
      return result;
    }

    public class Createexternaltransaction extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExternalTransaction> {

      private static final String REST_PATH = "androidpublisher/v3/{+parent}/externalTransactions";

      private final java.util.regex.Pattern PARENT_PATTERN =
          java.util.regex.Pattern.compile("^applications/[^/]+$");

      /**
       * Creates a new external transaction.
       *
       * Create a request for the method "externaltransactions.createexternaltransaction".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Createexternaltransaction#execute()} method to invoke the
       * remote operation. <p> {@link Createexternaltransaction#initialize(com.google.api.client.googlea
       * pis.services.AbstractGoogleClientRequest)} must be called to initialize this instance
       * immediately after invoking the constructor. </p>
       *
       * @param parent Required. The parent resource where this external transaction will be created. Format:
     *        applications/{package_name}
       * @param content the {@link com.google.api.services.androidpublisher.model.ExternalTransaction}
       * @since 1.13
       */
      protected Createexternaltransaction(java.lang.String parent, com.google.api.services.androidpublisher.model.ExternalTransaction content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.ExternalTransaction.class);
        this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^applications/[^/]+$");
        }
      }

      @Override
      public Createexternaltransaction set$Xgafv(java.lang.String $Xgafv) {
        return (Createexternaltransaction) super.set$Xgafv($Xgafv);
      }

      @Override
      public Createexternaltransaction setAccessToken(java.lang.String accessToken) {
        return (Createexternaltransaction) super.setAccessToken(accessToken);
      }

      @Override
      public Createexternaltransaction setAlt(java.lang.String alt) {
        return (Createexternaltransaction) super.setAlt(alt);
      }

      @Override
      public Createexternaltransaction setCallback(java.lang.String callback) {
        return (Createexternaltransaction) super.setCallback(callback);
      }

      @Override
      public Createexternaltransaction setFields(java.lang.String fields) {
        return (Createexternaltransaction) super.setFields(fields);
      }

      @Override
      public Createexternaltransaction setKey(java.lang.String key) {
        return (Createexternaltransaction) super.setKey(key);
      }

      @Override
      public Createexternaltransaction setOauthToken(java.lang.String oauthToken) {
        return (Createexternaltransaction) super.setOauthToken(oauthToken);
      }

      @Override
      public Createexternaltransaction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Createexternaltransaction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Createexternaltransaction setQuotaUser(java.lang.String quotaUser) {
        return (Createexternaltransaction) super.setQuotaUser(quotaUser);
      }

      @Override
      public Createexternaltransaction setUploadType(java.lang.String uploadType) {
        return (Createexternaltransaction) super.setUploadType(uploadType);
      }

      @Override
      public Createexternaltransaction setUploadProtocol(java.lang.String uploadProtocol) {
        return (Createexternaltransaction) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The parent resource where this external transaction will be created. Format:
       * applications/{package_name}
       */
      @com.google.api.client.util.Key
      private java.lang.String parent;

      /** Required. The parent resource where this external transaction will be created. Format:
     applications/{package_name}
       */
      public java.lang.String getParent() {
        return parent;
      }

      /**
       * Required. The parent resource where this external transaction will be created. Format:
       * applications/{package_name}
       */
      public Createexternaltransaction setParent(java.lang.String parent) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^applications/[^/]+$");
        }
        this.parent = parent;
        return this;
      }

      /**
       * Required. The id to use for the external transaction. Must be unique across all other
       * transactions for the app. This value should be 1-63 characters and valid characters are
       * /a-zA-Z0-9_-/. Do not use this field to store any Personally Identifiable Information (PII)
       * such as emails. Attempting to store PII in this field may result in requests being blocked.
       */
      @com.google.api.client.util.Key
      private java.lang.String externalTransactionId;

      /** Required. The id to use for the external transaction. Must be unique across all other transactions
     for the app. This value should be 1-63 characters and valid characters are /a-zA-Z0-9_-/. Do not
     use this field to store any Personally Identifiable Information (PII) such as emails. Attempting to
     store PII in this field may result in requests being blocked.
       */
      public java.lang.String getExternalTransactionId() {
        return externalTransactionId;
      }

      /**
       * Required. The id to use for the external transaction. Must be unique across all other
       * transactions for the app. This value should be 1-63 characters and valid characters are
       * /a-zA-Z0-9_-/. Do not use this field to store any Personally Identifiable Information (PII)
       * such as emails. Attempting to store PII in this field may result in requests being blocked.
       */
      public Createexternaltransaction setExternalTransactionId(java.lang.String externalTransactionId) {
        this.externalTransactionId = externalTransactionId;
        return this;
      }

      @Override
      public Createexternaltransaction set(String parameterName, Object value) {
        return (Createexternaltransaction) super.set(parameterName, value);
      }
    }
    /**
     * Gets an existing external transaction.
     *
     * Create a request for the method "externaltransactions.getexternaltransaction".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Getexternaltransaction#execute()} method to invoke the
     * remote operation.
     *
     * @param name Required. The name of the external transaction to retrieve. Format:
     *        applications/{package_name}/externalTransactions/{external_transaction}
     * @return the request
     */
    public Getexternaltransaction getexternaltransaction(java.lang.String name) throws java.io.IOException {
      Getexternaltransaction result = new Getexternaltransaction(name);
      initialize(result);
      return result;
    }

    public class Getexternaltransaction extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExternalTransaction> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^applications/[^/]+/externalTransactions/[^/]+$");

      /**
       * Gets an existing external transaction.
       *
       * Create a request for the method "externaltransactions.getexternaltransaction".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Getexternaltransaction#execute()} method to invoke the
       * remote operation. <p> {@link Getexternaltransaction#initialize(com.google.api.client.googleapis
       * .services.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
       * after invoking the constructor. </p>
       *
       * @param name Required. The name of the external transaction to retrieve. Format:
     *        applications/{package_name}/externalTransactions/{external_transaction}
       * @since 1.13
       */
      protected Getexternaltransaction(java.lang.String name) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ExternalTransaction.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^applications/[^/]+/externalTransactions/[^/]+$");
        }
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Getexternaltransaction set$Xgafv(java.lang.String $Xgafv) {
        return (Getexternaltransaction) super.set$Xgafv($Xgafv);
      }

      @Override
      public Getexternaltransaction setAccessToken(java.lang.String accessToken) {
        return (Getexternaltransaction) super.setAccessToken(accessToken);
      }

      @Override
      public Getexternaltransaction setAlt(java.lang.String alt) {
        return (Getexternaltransaction) super.setAlt(alt);
      }

      @Override
      public Getexternaltransaction setCallback(java.lang.String callback) {
        return (Getexternaltransaction) super.setCallback(callback);
      }

      @Override
      public Getexternaltransaction setFields(java.lang.String fields) {
        return (Getexternaltransaction) super.setFields(fields);
      }

      @Override
      public Getexternaltransaction setKey(java.lang.String key) {
        return (Getexternaltransaction) super.setKey(key);
      }

      @Override
      public Getexternaltransaction setOauthToken(java.lang.String oauthToken) {
        return (Getexternaltransaction) super.setOauthToken(oauthToken);
      }

      @Override
      public Getexternaltransaction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Getexternaltransaction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Getexternaltransaction setQuotaUser(java.lang.String quotaUser) {
        return (Getexternaltransaction) super.setQuotaUser(quotaUser);
      }

      @Override
      public Getexternaltransaction setUploadType(java.lang.String uploadType) {
        return (Getexternaltransaction) super.setUploadType(uploadType);
      }

      @Override
      public Getexternaltransaction setUploadProtocol(java.lang.String uploadProtocol) {
        return (Getexternaltransaction) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The name of the external transaction to retrieve. Format:
       * applications/{package_name}/externalTransactions/{external_transaction}
       */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the external transaction to retrieve. Format:
     applications/{package_name}/externalTransactions/{external_transaction}
       */
      public java.lang.String getName() {
        return name;
      }

      /**
       * Required. The name of the external transaction to retrieve. Format:
       * applications/{package_name}/externalTransactions/{external_transaction}
       */
      public Getexternaltransaction setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^applications/[^/]+/externalTransactions/[^/]+$");
        }
        this.name = name;
        return this;
      }

      @Override
      public Getexternaltransaction set(String parameterName, Object value) {
        return (Getexternaltransaction) super.set(parameterName, value);
      }
    }
    /**
     * Refunds or partially refunds an existing external transaction.
     *
     * Create a request for the method "externaltransactions.refundexternaltransaction".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Refundexternaltransaction#execute()} method to invoke the
     * remote operation.
     *
     * @param name Required. The name of the external transaction that will be refunded. Format:
     *        applications/{package_name}/externalTransactions/{external_transaction}
     * @param content the {@link com.google.api.services.androidpublisher.model.RefundExternalTransactionRequest}
     * @return the request
     */
    public Refundexternaltransaction refundexternaltransaction(java.lang.String name, com.google.api.services.androidpublisher.model.RefundExternalTransactionRequest content) throws java.io.IOException {
      Refundexternaltransaction result = new Refundexternaltransaction(name, content);
      initialize(result);
      return result;
    }

    public class Refundexternaltransaction extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ExternalTransaction> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}:refund";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^applications/[^/]+/externalTransactions/[^/]+$");

      /**
       * Refunds or partially refunds an existing external transaction.
       *
       * Create a request for the method "externaltransactions.refundexternaltransaction".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Refundexternaltransaction#execute()} method to invoke the
       * remote operation. <p> {@link Refundexternaltransaction#initialize(com.google.api.client.googlea
       * pis.services.AbstractGoogleClientRequest)} must be called to initialize this instance
       * immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the external transaction that will be refunded. Format:
     *        applications/{package_name}/externalTransactions/{external_transaction}
       * @param content the {@link com.google.api.services.androidpublisher.model.RefundExternalTransactionRequest}
       * @since 1.13
       */
      protected Refundexternaltransaction(java.lang.String name, com.google.api.services.androidpublisher.model.RefundExternalTransactionRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.ExternalTransaction.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^applications/[^/]+/externalTransactions/[^/]+$");
        }
      }

      @Override
      public Refundexternaltransaction set$Xgafv(java.lang.String $Xgafv) {
        return (Refundexternaltransaction) super.set$Xgafv($Xgafv);
      }

      @Override
      public Refundexternaltransaction setAccessToken(java.lang.String accessToken) {
        return (Refundexternaltransaction) super.setAccessToken(accessToken);
      }

      @Override
      public Refundexternaltransaction setAlt(java.lang.String alt) {
        return (Refundexternaltransaction) super.setAlt(alt);
      }

      @Override
      public Refundexternaltransaction setCallback(java.lang.String callback) {
        return (Refundexternaltransaction) super.setCallback(callback);
      }

      @Override
      public Refundexternaltransaction setFields(java.lang.String fields) {
        return (Refundexternaltransaction) super.setFields(fields);
      }

      @Override
      public Refundexternaltransaction setKey(java.lang.String key) {
        return (Refundexternaltransaction) super.setKey(key);
      }

      @Override
      public Refundexternaltransaction setOauthToken(java.lang.String oauthToken) {
        return (Refundexternaltransaction) super.setOauthToken(oauthToken);
      }

      @Override
      public Refundexternaltransaction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Refundexternaltransaction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Refundexternaltransaction setQuotaUser(java.lang.String quotaUser) {
        return (Refundexternaltransaction) super.setQuotaUser(quotaUser);
      }

      @Override
      public Refundexternaltransaction setUploadType(java.lang.String uploadType) {
        return (Refundexternaltransaction) super.setUploadType(uploadType);
      }

      @Override
      public Refundexternaltransaction setUploadProtocol(java.lang.String uploadProtocol) {
        return (Refundexternaltransaction) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The name of the external transaction that will be refunded. Format:
       * applications/{package_name}/externalTransactions/{external_transaction}
       */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the external transaction that will be refunded. Format:
     applications/{package_name}/externalTransactions/{external_transaction}
       */
      public java.lang.String getName() {
        return name;
      }

      /**
       * Required. The name of the external transaction that will be refunded. Format:
       * applications/{package_name}/externalTransactions/{external_transaction}
       */
      public Refundexternaltransaction setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^applications/[^/]+/externalTransactions/[^/]+$");
        }
        this.name = name;
        return this;
      }

      @Override
      public Refundexternaltransaction set(String parameterName, Object value) {
        return (Refundexternaltransaction) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Generatedapks collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Generatedapks.List request = androidpublisher.generatedapks().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Generatedapks generatedapks() {
    return new Generatedapks();
  }

  /**
   * The "generatedapks" collection of methods.
   */
  public class Generatedapks {

    /**
     * Downloads a single signed APK generated from an app bundle.
     *
     * Create a request for the method "generatedapks.download".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Download#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param versionCode Version code of the app bundle.
     * @param downloadId Download ID, which uniquely identifies the APK to download. Can be obtained from the response of
     *        `generatedapks.list` method.
     * @return the request
     */
    public Download download(java.lang.String packageName, java.lang.Integer versionCode, java.lang.String downloadId) throws java.io.IOException {
      Download result = new Download(packageName, versionCode, downloadId);
      initialize(result);
      return result;
    }

    public class Download extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}/downloads/{downloadId}:download";

      /**
       * Downloads a single signed APK generated from an app bundle.
       *
       * Create a request for the method "generatedapks.download".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Download#execute()} method to invoke the remote operation.
       * <p> {@link
       * Download#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param versionCode Version code of the app bundle.
       * @param downloadId Download ID, which uniquely identifies the APK to download. Can be obtained from the response of
     *        `generatedapks.list` method.
       * @since 1.13
       */
      protected Download(java.lang.String packageName, java.lang.Integer versionCode, java.lang.String downloadId) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, Void.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
        this.downloadId = com.google.api.client.util.Preconditions.checkNotNull(downloadId, "Required parameter downloadId must be specified.");
        initializeMediaDownload();
      }

      @Override
      public void executeMediaAndDownloadTo(java.io.OutputStream outputStream) throws java.io.IOException {
        super.executeMediaAndDownloadTo(outputStream);
      }

      @Override
      public java.io.InputStream executeMediaAsInputStream() throws java.io.IOException {
        return super.executeMediaAsInputStream();
      }

      @Override
      public com.google.api.client.http.HttpResponse executeMedia() throws java.io.IOException {
        return super.executeMedia();
      }

      @Override
      public com.google.api.client.http.GenericUrl buildHttpRequestUrl() {
        java.lang.String baseUrl = ("media".equals(get("alt")) && getMediaHttpUploader() == null)
            ? getRootUrl() + "download/" + getServicePath() : getBaseUrl();
        return new com.google.api.client.http.GenericUrl(
            com.google.api.client.http.UriTemplate.expand(baseUrl, getUriTemplate(), this, true));
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Download set$Xgafv(java.lang.String $Xgafv) {
        return (Download) super.set$Xgafv($Xgafv);
      }

      @Override
      public Download setAccessToken(java.lang.String accessToken) {
        return (Download) super.setAccessToken(accessToken);
      }

      @Override
      public Download setAlt(java.lang.String alt) {
        return (Download) super.setAlt(alt);
      }

      @Override
      public Download setCallback(java.lang.String callback) {
        return (Download) super.setCallback(callback);
      }

      @Override
      public Download setFields(java.lang.String fields) {
        return (Download) super.setFields(fields);
      }

      @Override
      public Download setKey(java.lang.String key) {
        return (Download) super.setKey(key);
      }

      @Override
      public Download setOauthToken(java.lang.String oauthToken) {
        return (Download) super.setOauthToken(oauthToken);
      }

      @Override
      public Download setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Download) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Download setQuotaUser(java.lang.String quotaUser) {
        return (Download) super.setQuotaUser(quotaUser);
      }

      @Override
      public Download setUploadType(java.lang.String uploadType) {
        return (Download) super.setUploadType(uploadType);
      }

      @Override
      public Download setUploadProtocol(java.lang.String uploadProtocol) {
        return (Download) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Download setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Version code of the app bundle. */
      @com.google.api.client.util.Key
      private java.lang.Integer versionCode;

      /** Version code of the app bundle.
       */
      public java.lang.Integer getVersionCode() {
        return versionCode;
      }

      /** Version code of the app bundle. */
      public Download setVersionCode(java.lang.Integer versionCode) {
        this.versionCode = versionCode;
        return this;
      }

      /**
       * Download ID, which uniquely identifies the APK to download. Can be obtained from the
       * response of `generatedapks.list` method.
       */
      @com.google.api.client.util.Key
      private java.lang.String downloadId;

      /** Download ID, which uniquely identifies the APK to download. Can be obtained from the response of
     `generatedapks.list` method.
       */
      public java.lang.String getDownloadId() {
        return downloadId;
      }

      /**
       * Download ID, which uniquely identifies the APK to download. Can be obtained from the
       * response of `generatedapks.list` method.
       */
      public Download setDownloadId(java.lang.String downloadId) {
        this.downloadId = downloadId;
        return this;
      }

      @Override
      public Download set(String parameterName, Object value) {
        return (Download) super.set(parameterName, value);
      }
    }
    /**
     * Returns download metadata for all APKs that were generated from a given app bundle.
     *
     * Create a request for the method "generatedapks.list".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param versionCode Version code of the app bundle.
     * @return the request
     */
    public List list(java.lang.String packageName, java.lang.Integer versionCode) throws java.io.IOException {
      List result = new List(packageName, versionCode);
      initialize(result);
      return result;
    }

    public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.GeneratedApksListResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}";

      /**
       * Returns download metadata for all APKs that were generated from a given app bundle.
       *
       * Create a request for the method "generatedapks.list".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param versionCode Version code of the app bundle.
       * @since 1.13
       */
      protected List(java.lang.String packageName, java.lang.Integer versionCode) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.GeneratedApksListResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public List setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Version code of the app bundle. */
      @com.google.api.client.util.Key
      private java.lang.Integer versionCode;

      /** Version code of the app bundle.
       */
      public java.lang.Integer getVersionCode() {
        return versionCode;
      }

      /** Version code of the app bundle. */
      public List setVersionCode(java.lang.Integer versionCode) {
        this.versionCode = versionCode;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Grants collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Grants.List request = androidpublisher.grants().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Grants grants() {
    return new Grants();
  }

  /**
   * The "grants" collection of methods.
   */
  public class Grants {

    /**
     * Grant access for a user to the given package.
     *
     * Create a request for the method "grants.create".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
     *
     * @param parent Required. The user which needs permission. Format: developers/{developer}/users/{user}
     * @param content the {@link com.google.api.services.androidpublisher.model.Grant}
     * @return the request
     */
    public Create create(java.lang.String parent, com.google.api.services.androidpublisher.model.Grant content) throws java.io.IOException {
      Create result = new Create(parent, content);
      initialize(result);
      return result;
    }

    public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Grant> {

      private static final String REST_PATH = "androidpublisher/v3/{+parent}/grants";

      private final java.util.regex.Pattern PARENT_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+/users/[^/]+$");

      /**
       * Grant access for a user to the given package.
       *
       * Create a request for the method "grants.create".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       * <p> {@link
       * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param parent Required. The user which needs permission. Format: developers/{developer}/users/{user}
       * @param content the {@link com.google.api.services.androidpublisher.model.Grant}
       * @since 1.13
       */
      protected Create(java.lang.String parent, com.google.api.services.androidpublisher.model.Grant content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Grant.class);
        this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
      }

      @Override
      public Create set$Xgafv(java.lang.String $Xgafv) {
        return (Create) super.set$Xgafv($Xgafv);
      }

      @Override
      public Create setAccessToken(java.lang.String accessToken) {
        return (Create) super.setAccessToken(accessToken);
      }

      @Override
      public Create setAlt(java.lang.String alt) {
        return (Create) super.setAlt(alt);
      }

      @Override
      public Create setCallback(java.lang.String callback) {
        return (Create) super.setCallback(callback);
      }

      @Override
      public Create setFields(java.lang.String fields) {
        return (Create) super.setFields(fields);
      }

      @Override
      public Create setKey(java.lang.String key) {
        return (Create) super.setKey(key);
      }

      @Override
      public Create setOauthToken(java.lang.String oauthToken) {
        return (Create) super.setOauthToken(oauthToken);
      }

      @Override
      public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Create) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Create setQuotaUser(java.lang.String quotaUser) {
        return (Create) super.setQuotaUser(quotaUser);
      }

      @Override
      public Create setUploadType(java.lang.String uploadType) {
        return (Create) super.setUploadType(uploadType);
      }

      @Override
      public Create setUploadProtocol(java.lang.String uploadProtocol) {
        return (Create) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The user which needs permission. Format: developers/{developer}/users/{user} */
      @com.google.api.client.util.Key
      private java.lang.String parent;

      /** Required. The user which needs permission. Format: developers/{developer}/users/{user}
       */
      public java.lang.String getParent() {
        return parent;
      }

      /** Required. The user which needs permission. Format: developers/{developer}/users/{user} */
      public Create setParent(java.lang.String parent) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
        this.parent = parent;
        return this;
      }

      @Override
      public Create set(String parameterName, Object value) {
        return (Create) super.set(parameterName, value);
      }
    }
    /**
     * Removes all access for the user to the given package or developer account.
     *
     * Create a request for the method "grants.delete".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
     *
     * @param name Required. The name of the grant to delete. Format:
     *        developers/{developer}/users/{email}/grants/{package_name}
     * @return the request
     */
    public Delete delete(java.lang.String name) throws java.io.IOException {
      Delete result = new Delete(name);
      initialize(result);
      return result;
    }

    public class Delete extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+/users/[^/]+/grants/[^/]+$");

      /**
       * Removes all access for the user to the given package or developer account.
       *
       * Create a request for the method "grants.delete".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       * <p> {@link
       * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the grant to delete. Format:
     *        developers/{developer}/users/{email}/grants/{package_name}
       * @since 1.13
       */
      protected Delete(java.lang.String name) {
        super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+/grants/[^/]+$");
        }
      }

      @Override
      public Delete set$Xgafv(java.lang.String $Xgafv) {
        return (Delete) super.set$Xgafv($Xgafv);
      }

      @Override
      public Delete setAccessToken(java.lang.String accessToken) {
        return (Delete) super.setAccessToken(accessToken);
      }

      @Override
      public Delete setAlt(java.lang.String alt) {
        return (Delete) super.setAlt(alt);
      }

      @Override
      public Delete setCallback(java.lang.String callback) {
        return (Delete) super.setCallback(callback);
      }

      @Override
      public Delete setFields(java.lang.String fields) {
        return (Delete) super.setFields(fields);
      }

      @Override
      public Delete setKey(java.lang.String key) {
        return (Delete) super.setKey(key);
      }

      @Override
      public Delete setOauthToken(java.lang.String oauthToken) {
        return (Delete) super.setOauthToken(oauthToken);
      }

      @Override
      public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Delete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Delete setQuotaUser(java.lang.String quotaUser) {
        return (Delete) super.setQuotaUser(quotaUser);
      }

      @Override
      public Delete setUploadType(java.lang.String uploadType) {
        return (Delete) super.setUploadType(uploadType);
      }

      @Override
      public Delete setUploadProtocol(java.lang.String uploadProtocol) {
        return (Delete) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The name of the grant to delete. Format:
       * developers/{developer}/users/{email}/grants/{package_name}
       */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the grant to delete. Format:
     developers/{developer}/users/{email}/grants/{package_name}
       */
      public java.lang.String getName() {
        return name;
      }

      /**
       * Required. The name of the grant to delete. Format:
       * developers/{developer}/users/{email}/grants/{package_name}
       */
      public Delete setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+/grants/[^/]+$");
        }
        this.name = name;
        return this;
      }

      @Override
      public Delete set(String parameterName, Object value) {
        return (Delete) super.set(parameterName, value);
      }
    }
    /**
     * Updates access for the user to the given package.
     *
     * Create a request for the method "grants.patch".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
     *
     * @param name Required. Resource name for this grant, following the pattern
     *        "developers/{developer}/users/{email}/grants/{package_name}". If this grant is for a draft
     *        app, the app ID will be used in this resource name instead of the package name.
     * @param content the {@link com.google.api.services.androidpublisher.model.Grant}
     * @return the request
     */
    public Patch patch(java.lang.String name, com.google.api.services.androidpublisher.model.Grant content) throws java.io.IOException {
      Patch result = new Patch(name, content);
      initialize(result);
      return result;
    }

    public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Grant> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+/users/[^/]+/grants/[^/]+$");

      /**
       * Updates access for the user to the given package.
       *
       * Create a request for the method "grants.patch".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       * <p> {@link
       * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. Resource name for this grant, following the pattern
     *        "developers/{developer}/users/{email}/grants/{package_name}". If this grant is for a draft
     *        app, the app ID will be used in this resource name instead of the package name.
       * @param content the {@link com.google.api.services.androidpublisher.model.Grant}
       * @since 1.13
       */
      protected Patch(java.lang.String name, com.google.api.services.androidpublisher.model.Grant content) {
        super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.Grant.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+/grants/[^/]+$");
        }
      }

      @Override
      public Patch set$Xgafv(java.lang.String $Xgafv) {
        return (Patch) super.set$Xgafv($Xgafv);
      }

      @Override
      public Patch setAccessToken(java.lang.String accessToken) {
        return (Patch) super.setAccessToken(accessToken);
      }

      @Override
      public Patch setAlt(java.lang.String alt) {
        return (Patch) super.setAlt(alt);
      }

      @Override
      public Patch setCallback(java.lang.String callback) {
        return (Patch) super.setCallback(callback);
      }

      @Override
      public Patch setFields(java.lang.String fields) {
        return (Patch) super.setFields(fields);
      }

      @Override
      public Patch setKey(java.lang.String key) {
        return (Patch) super.setKey(key);
      }

      @Override
      public Patch setOauthToken(java.lang.String oauthToken) {
        return (Patch) super.setOauthToken(oauthToken);
      }

      @Override
      public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Patch) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Patch setQuotaUser(java.lang.String quotaUser) {
        return (Patch) super.setQuotaUser(quotaUser);
      }

      @Override
      public Patch setUploadType(java.lang.String uploadType) {
        return (Patch) super.setUploadType(uploadType);
      }

      @Override
      public Patch setUploadProtocol(java.lang.String uploadProtocol) {
        return (Patch) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. Resource name for this grant, following the pattern
       * "developers/{developer}/users/{email}/grants/{package_name}". If this grant is for a draft
       * app, the app ID will be used in this resource name instead of the package name.
       */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. Resource name for this grant, following the pattern
     "developers/{developer}/users/{email}/grants/{package_name}". If this grant is for a draft app, the
     app ID will be used in this resource name instead of the package name.
       */
      public java.lang.String getName() {
        return name;
      }

      /**
       * Required. Resource name for this grant, following the pattern
       * "developers/{developer}/users/{email}/grants/{package_name}". If this grant is for a draft
       * app, the app ID will be used in this resource name instead of the package name.
       */
      public Patch setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+/grants/[^/]+$");
        }
        this.name = name;
        return this;
      }

      /** Optional. The list of fields to be updated. */
      @com.google.api.client.util.Key
      private String updateMask;

      /** Optional. The list of fields to be updated.
       */
      public String getUpdateMask() {
        return updateMask;
      }

      /** Optional. The list of fields to be updated. */
      public Patch setUpdateMask(String updateMask) {
        this.updateMask = updateMask;
        return this;
      }

      @Override
      public Patch set(String parameterName, Object value) {
        return (Patch) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Inappproducts collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Inappproducts.List request = androidpublisher.inappproducts().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Inappproducts inappproducts() {
    return new Inappproducts();
  }

  /**
   * The "inappproducts" collection of methods.
   */
  public class Inappproducts {

    /**
     * Deletes in-app products (managed products or subscriptions). Set the latencyTolerance field on
     * nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update
     * throughput. This method should not be used to delete subscriptions. See [this
     * article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-
     * june-2023.html) for more information.
     *
     * Create a request for the method "inappproducts.batchDelete".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
     * operation.
     *
     * @param packageName Package name of the app.
     * @param content the {@link com.google.api.services.androidpublisher.model.InappproductsBatchDeleteRequest}
     * @return the request
     */
    public BatchDelete batchDelete(java.lang.String packageName, com.google.api.services.androidpublisher.model.InappproductsBatchDeleteRequest content) throws java.io.IOException {
      BatchDelete result = new BatchDelete(packageName, content);
      initialize(result);
      return result;
    }

    public class BatchDelete extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts:batchDelete";

      /**
       * Deletes in-app products (managed products or subscriptions). Set the latencyTolerance field on
       * nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update
       * throughput. This method should not be used to delete subscriptions. See [this
       * article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-
       * api-june-2023.html) for more information.
       *
       * Create a request for the method "inappproducts.batchDelete".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
       * operation. <p> {@link
       * BatchDelete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.InappproductsBatchDeleteRequest}
       * @since 1.13
       */
      protected BatchDelete(java.lang.String packageName, com.google.api.services.androidpublisher.model.InappproductsBatchDeleteRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public BatchDelete set$Xgafv(java.lang.String $Xgafv) {
        return (BatchDelete) super.set$Xgafv($Xgafv);
      }

      @Override
      public BatchDelete setAccessToken(java.lang.String accessToken) {
        return (BatchDelete) super.setAccessToken(accessToken);
      }

      @Override
      public BatchDelete setAlt(java.lang.String alt) {
        return (BatchDelete) super.setAlt(alt);
      }

      @Override
      public BatchDelete setCallback(java.lang.String callback) {
        return (BatchDelete) super.setCallback(callback);
      }

      @Override
      public BatchDelete setFields(java.lang.String fields) {
        return (BatchDelete) super.setFields(fields);
      }

      @Override
      public BatchDelete setKey(java.lang.String key) {
        return (BatchDelete) super.setKey(key);
      }

      @Override
      public BatchDelete setOauthToken(java.lang.String oauthToken) {
        return (BatchDelete) super.setOauthToken(oauthToken);
      }

      @Override
      public BatchDelete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (BatchDelete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public BatchDelete setQuotaUser(java.lang.String quotaUser) {
        return (BatchDelete) super.setQuotaUser(quotaUser);
      }

      @Override
      public BatchDelete setUploadType(java.lang.String uploadType) {
        return (BatchDelete) super.setUploadType(uploadType);
      }

      @Override
      public BatchDelete setUploadProtocol(java.lang.String uploadProtocol) {
        return (BatchDelete) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public BatchDelete setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public BatchDelete set(String parameterName, Object value) {
        return (BatchDelete) super.set(parameterName, value);
      }
    }
    /**
     * Reads multiple in-app products, which can be managed products or subscriptions. This method
     * should not be used to retrieve subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.batchGet".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @return the request
     */
    public BatchGet batchGet(java.lang.String packageName) throws java.io.IOException {
      BatchGet result = new BatchGet(packageName);
      initialize(result);
      return result;
    }

    public class BatchGet extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InappproductsBatchGetResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts:batchGet";

      /**
       * Reads multiple in-app products, which can be managed products or subscriptions. This method
       * should not be used to retrieve subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.batchGet".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
       * <p> {@link
       * BatchGet#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @since 1.13
       */
      protected BatchGet(java.lang.String packageName) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.InappproductsBatchGetResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public BatchGet set$Xgafv(java.lang.String $Xgafv) {
        return (BatchGet) super.set$Xgafv($Xgafv);
      }

      @Override
      public BatchGet setAccessToken(java.lang.String accessToken) {
        return (BatchGet) super.setAccessToken(accessToken);
      }

      @Override
      public BatchGet setAlt(java.lang.String alt) {
        return (BatchGet) super.setAlt(alt);
      }

      @Override
      public BatchGet setCallback(java.lang.String callback) {
        return (BatchGet) super.setCallback(callback);
      }

      @Override
      public BatchGet setFields(java.lang.String fields) {
        return (BatchGet) super.setFields(fields);
      }

      @Override
      public BatchGet setKey(java.lang.String key) {
        return (BatchGet) super.setKey(key);
      }

      @Override
      public BatchGet setOauthToken(java.lang.String oauthToken) {
        return (BatchGet) super.setOauthToken(oauthToken);
      }

      @Override
      public BatchGet setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (BatchGet) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public BatchGet setQuotaUser(java.lang.String quotaUser) {
        return (BatchGet) super.setQuotaUser(quotaUser);
      }

      @Override
      public BatchGet setUploadType(java.lang.String uploadType) {
        return (BatchGet) super.setUploadType(uploadType);
      }

      @Override
      public BatchGet setUploadProtocol(java.lang.String uploadProtocol) {
        return (BatchGet) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public BatchGet setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for the in-app products. */
      @com.google.api.client.util.Key
      private java.util.List<java.lang.String> sku;

      /** Unique identifier for the in-app products.
       */
      public java.util.List<java.lang.String> getSku() {
        return sku;
      }

      /** Unique identifier for the in-app products. */
      public BatchGet setSku(java.util.List<java.lang.String> sku) {
        this.sku = sku;
        return this;
      }

      @Override
      public BatchGet set(String parameterName, Object value) {
        return (BatchGet) super.set(parameterName, value);
      }
    }
    /**
     * Updates or inserts one or more in-app products (managed products or subscriptions). Set the
     * latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to
     * achieve maximum update throughput. This method should no longer be used to update subscriptions.
     * See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-
     * developer-api-june-2023.html) for more information.
     *
     * Create a request for the method "inappproducts.batchUpdate".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
     * operation.
     *
     * @param packageName Package name of the app.
     * @param content the {@link com.google.api.services.androidpublisher.model.InappproductsBatchUpdateRequest}
     * @return the request
     */
    public BatchUpdate batchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.InappproductsBatchUpdateRequest content) throws java.io.IOException {
      BatchUpdate result = new BatchUpdate(packageName, content);
      initialize(result);
      return result;
    }

    public class BatchUpdate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InappproductsBatchUpdateResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts:batchUpdate";

      /**
       * Updates or inserts one or more in-app products (managed products or subscriptions). Set the
       * latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
       * to achieve maximum update throughput. This method should no longer be used to update
       * subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-
       * google-play-developer-api-june-2023.html) for more information.
       *
       * Create a request for the method "inappproducts.batchUpdate".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
       * operation. <p> {@link
       * BatchUpdate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.InappproductsBatchUpdateRequest}
       * @since 1.13
       */
      protected BatchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.InappproductsBatchUpdateRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.InappproductsBatchUpdateResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public BatchUpdate set$Xgafv(java.lang.String $Xgafv) {
        return (BatchUpdate) super.set$Xgafv($Xgafv);
      }

      @Override
      public BatchUpdate setAccessToken(java.lang.String accessToken) {
        return (BatchUpdate) super.setAccessToken(accessToken);
      }

      @Override
      public BatchUpdate setAlt(java.lang.String alt) {
        return (BatchUpdate) super.setAlt(alt);
      }

      @Override
      public BatchUpdate setCallback(java.lang.String callback) {
        return (BatchUpdate) super.setCallback(callback);
      }

      @Override
      public BatchUpdate setFields(java.lang.String fields) {
        return (BatchUpdate) super.setFields(fields);
      }

      @Override
      public BatchUpdate setKey(java.lang.String key) {
        return (BatchUpdate) super.setKey(key);
      }

      @Override
      public BatchUpdate setOauthToken(java.lang.String oauthToken) {
        return (BatchUpdate) super.setOauthToken(oauthToken);
      }

      @Override
      public BatchUpdate setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (BatchUpdate) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public BatchUpdate setQuotaUser(java.lang.String quotaUser) {
        return (BatchUpdate) super.setQuotaUser(quotaUser);
      }

      @Override
      public BatchUpdate setUploadType(java.lang.String uploadType) {
        return (BatchUpdate) super.setUploadType(uploadType);
      }

      @Override
      public BatchUpdate setUploadProtocol(java.lang.String uploadProtocol) {
        return (BatchUpdate) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public BatchUpdate setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public BatchUpdate set(String parameterName, Object value) {
        return (BatchUpdate) super.set(parameterName, value);
      }
    }
    /**
     * Deletes an in-app product (a managed product or a subscription). This method should no longer be
     * used to delete subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.delete".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param sku Unique identifier for the in-app product.
     * @return the request
     */
    public Delete delete(java.lang.String packageName, java.lang.String sku) throws java.io.IOException {
      Delete result = new Delete(packageName, sku);
      initialize(result);
      return result;
    }

    public class Delete extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}";

      /**
       * Deletes an in-app product (a managed product or a subscription). This method should no longer
       * be used to delete subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.delete".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       * <p> {@link
       * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param sku Unique identifier for the in-app product.
       * @since 1.13
       */
      protected Delete(java.lang.String packageName, java.lang.String sku) {
        super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.sku = com.google.api.client.util.Preconditions.checkNotNull(sku, "Required parameter sku must be specified.");
      }

      @Override
      public Delete set$Xgafv(java.lang.String $Xgafv) {
        return (Delete) super.set$Xgafv($Xgafv);
      }

      @Override
      public Delete setAccessToken(java.lang.String accessToken) {
        return (Delete) super.setAccessToken(accessToken);
      }

      @Override
      public Delete setAlt(java.lang.String alt) {
        return (Delete) super.setAlt(alt);
      }

      @Override
      public Delete setCallback(java.lang.String callback) {
        return (Delete) super.setCallback(callback);
      }

      @Override
      public Delete setFields(java.lang.String fields) {
        return (Delete) super.setFields(fields);
      }

      @Override
      public Delete setKey(java.lang.String key) {
        return (Delete) super.setKey(key);
      }

      @Override
      public Delete setOauthToken(java.lang.String oauthToken) {
        return (Delete) super.setOauthToken(oauthToken);
      }

      @Override
      public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Delete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Delete setQuotaUser(java.lang.String quotaUser) {
        return (Delete) super.setQuotaUser(quotaUser);
      }

      @Override
      public Delete setUploadType(java.lang.String uploadType) {
        return (Delete) super.setUploadType(uploadType);
      }

      @Override
      public Delete setUploadProtocol(java.lang.String uploadProtocol) {
        return (Delete) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Delete setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for the in-app product. */
      @com.google.api.client.util.Key
      private java.lang.String sku;

      /** Unique identifier for the in-app product.
       */
      public java.lang.String getSku() {
        return sku;
      }

      /** Unique identifier for the in-app product. */
      public Delete setSku(java.lang.String sku) {
        this.sku = sku;
        return this;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      @com.google.api.client.util.Key
      private java.lang.String latencyTolerance;

      /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
     sensitive.
       */
      public java.lang.String getLatencyTolerance() {
        return latencyTolerance;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      public Delete setLatencyTolerance(java.lang.String latencyTolerance) {
        this.latencyTolerance = latencyTolerance;
        return this;
      }

      @Override
      public Delete set(String parameterName, Object value) {
        return (Delete) super.set(parameterName, value);
      }
    }
    /**
     * Gets an in-app product, which can be a managed product or a subscription. This method should no
     * longer be used to retrieve subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.get".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param sku Unique identifier for the in-app product.
     * @return the request
     */
    public Get get(java.lang.String packageName, java.lang.String sku) throws java.io.IOException {
      Get result = new Get(packageName, sku);
      initialize(result);
      return result;
    }

    public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InAppProduct> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}";

      /**
       * Gets an in-app product, which can be a managed product or a subscription. This method should no
       * longer be used to retrieve subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.get".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param sku Unique identifier for the in-app product.
       * @since 1.13
       */
      protected Get(java.lang.String packageName, java.lang.String sku) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.InAppProduct.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.sku = com.google.api.client.util.Preconditions.checkNotNull(sku, "Required parameter sku must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Get setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for the in-app product. */
      @com.google.api.client.util.Key
      private java.lang.String sku;

      /** Unique identifier for the in-app product.
       */
      public java.lang.String getSku() {
        return sku;
      }

      /** Unique identifier for the in-app product. */
      public Get setSku(java.lang.String sku) {
        this.sku = sku;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Creates an in-app product (a managed product or a subscription). This method should no longer be
     * used to create subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.insert".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Insert#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
     * @return the request
     */
    public Insert insert(java.lang.String packageName, com.google.api.services.androidpublisher.model.InAppProduct content) throws java.io.IOException {
      Insert result = new Insert(packageName, content);
      initialize(result);
      return result;
    }

    public class Insert extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InAppProduct> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts";

      /**
       * Creates an in-app product (a managed product or a subscription). This method should no longer
       * be used to create subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.insert".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Insert#execute()} method to invoke the remote operation.
       * <p> {@link
       * Insert#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
       * @since 1.13
       */
      protected Insert(java.lang.String packageName, com.google.api.services.androidpublisher.model.InAppProduct content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.InAppProduct.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public Insert set$Xgafv(java.lang.String $Xgafv) {
        return (Insert) super.set$Xgafv($Xgafv);
      }

      @Override
      public Insert setAccessToken(java.lang.String accessToken) {
        return (Insert) super.setAccessToken(accessToken);
      }

      @Override
      public Insert setAlt(java.lang.String alt) {
        return (Insert) super.setAlt(alt);
      }

      @Override
      public Insert setCallback(java.lang.String callback) {
        return (Insert) super.setCallback(callback);
      }

      @Override
      public Insert setFields(java.lang.String fields) {
        return (Insert) super.setFields(fields);
      }

      @Override
      public Insert setKey(java.lang.String key) {
        return (Insert) super.setKey(key);
      }

      @Override
      public Insert setOauthToken(java.lang.String oauthToken) {
        return (Insert) super.setOauthToken(oauthToken);
      }

      @Override
      public Insert setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Insert) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Insert setQuotaUser(java.lang.String quotaUser) {
        return (Insert) super.setQuotaUser(quotaUser);
      }

      @Override
      public Insert setUploadType(java.lang.String uploadType) {
        return (Insert) super.setUploadType(uploadType);
      }

      @Override
      public Insert setUploadProtocol(java.lang.String uploadProtocol) {
        return (Insert) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Insert setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean autoConvertMissingPrices;

      /** If true the prices for all regions targeted by the parent app that don't have a price specified for
     this in-app product will be auto converted to the target currency based on the default price.
     Defaults to false.
       */
      public java.lang.Boolean getAutoConvertMissingPrices() {
        return autoConvertMissingPrices;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      public Insert setAutoConvertMissingPrices(java.lang.Boolean autoConvertMissingPrices) {
        this.autoConvertMissingPrices = autoConvertMissingPrices;
        return this;
      }

      @Override
      public Insert set(String parameterName, Object value) {
        return (Insert) super.set(parameterName, value);
      }
    }
    /**
     * Lists all in-app products - both managed products and subscriptions. If an app has a large number
     * of in-app products, the response may be paginated. In this case the response field
     * `tokenPagination.nextPageToken` will be set and the caller should provide its value as a `token`
     * request parameter to retrieve the next page. This method should no longer be used to retrieve
     * subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-
     * google-play-developer-api-june-2023.html) for more information.
     *
     * Create a request for the method "inappproducts.list".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @return the request
     */
    public List list(java.lang.String packageName) throws java.io.IOException {
      List result = new List(packageName);
      initialize(result);
      return result;
    }

    public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InappproductsListResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts";

      /**
       * Lists all in-app products - both managed products and subscriptions. If an app has a large
       * number of in-app products, the response may be paginated. In this case the response field
       * `tokenPagination.nextPageToken` will be set and the caller should provide its value as a
       * `token` request parameter to retrieve the next page. This method should no longer be used to
       * retrieve subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.list".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @since 1.13
       */
      protected List(java.lang.String packageName) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.InappproductsListResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public List setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Deprecated and ignored. The page size is determined by the server. */
      @com.google.api.client.util.Key
      private java.lang.Long maxResults;

      /** Deprecated and ignored. The page size is determined by the server.
       */
      public java.lang.Long getMaxResults() {
        return maxResults;
      }

      /** Deprecated and ignored. The page size is determined by the server. */
      public List setMaxResults(java.lang.Long maxResults) {
        this.maxResults = maxResults;
        return this;
      }

      /** Deprecated and ignored. Set the `token` parameter to retrieve the next page. */
      @com.google.api.client.util.Key
      private java.lang.Long startIndex;

      /** Deprecated and ignored. Set the `token` parameter to retrieve the next page.
       */
      public java.lang.Long getStartIndex() {
        return startIndex;
      }

      /** Deprecated and ignored. Set the `token` parameter to retrieve the next page. */
      public List setStartIndex(java.lang.Long startIndex) {
        this.startIndex = startIndex;
        return this;
      }

      /** Pagination token. If empty, list starts at the first product. */
      @com.google.api.client.util.Key
      private java.lang.String token;

      /** Pagination token. If empty, list starts at the first product.
       */
      public java.lang.String getToken() {
        return token;
      }

      /** Pagination token. If empty, list starts at the first product. */
      public List setToken(java.lang.String token) {
        this.token = token;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }
    /**
     * Patches an in-app product (a managed product or a subscription). This method should no longer be
     * used to update subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.patch".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param sku Unique identifier for the in-app product.
     * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
     * @return the request
     */
    public Patch patch(java.lang.String packageName, java.lang.String sku, com.google.api.services.androidpublisher.model.InAppProduct content) throws java.io.IOException {
      Patch result = new Patch(packageName, sku, content);
      initialize(result);
      return result;
    }

    public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InAppProduct> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}";

      /**
       * Patches an in-app product (a managed product or a subscription). This method should no longer
       * be used to update subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.patch".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       * <p> {@link
       * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param sku Unique identifier for the in-app product.
       * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
       * @since 1.13
       */
      protected Patch(java.lang.String packageName, java.lang.String sku, com.google.api.services.androidpublisher.model.InAppProduct content) {
        super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.InAppProduct.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.sku = com.google.api.client.util.Preconditions.checkNotNull(sku, "Required parameter sku must be specified.");
      }

      @Override
      public Patch set$Xgafv(java.lang.String $Xgafv) {
        return (Patch) super.set$Xgafv($Xgafv);
      }

      @Override
      public Patch setAccessToken(java.lang.String accessToken) {
        return (Patch) super.setAccessToken(accessToken);
      }

      @Override
      public Patch setAlt(java.lang.String alt) {
        return (Patch) super.setAlt(alt);
      }

      @Override
      public Patch setCallback(java.lang.String callback) {
        return (Patch) super.setCallback(callback);
      }

      @Override
      public Patch setFields(java.lang.String fields) {
        return (Patch) super.setFields(fields);
      }

      @Override
      public Patch setKey(java.lang.String key) {
        return (Patch) super.setKey(key);
      }

      @Override
      public Patch setOauthToken(java.lang.String oauthToken) {
        return (Patch) super.setOauthToken(oauthToken);
      }

      @Override
      public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Patch) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Patch setQuotaUser(java.lang.String quotaUser) {
        return (Patch) super.setQuotaUser(quotaUser);
      }

      @Override
      public Patch setUploadType(java.lang.String uploadType) {
        return (Patch) super.setUploadType(uploadType);
      }

      @Override
      public Patch setUploadProtocol(java.lang.String uploadProtocol) {
        return (Patch) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Patch setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for the in-app product. */
      @com.google.api.client.util.Key
      private java.lang.String sku;

      /** Unique identifier for the in-app product.
       */
      public java.lang.String getSku() {
        return sku;
      }

      /** Unique identifier for the in-app product. */
      public Patch setSku(java.lang.String sku) {
        this.sku = sku;
        return this;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean autoConvertMissingPrices;

      /** If true the prices for all regions targeted by the parent app that don't have a price specified for
     this in-app product will be auto converted to the target currency based on the default price.
     Defaults to false.
       */
      public java.lang.Boolean getAutoConvertMissingPrices() {
        return autoConvertMissingPrices;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      public Patch setAutoConvertMissingPrices(java.lang.Boolean autoConvertMissingPrices) {
        this.autoConvertMissingPrices = autoConvertMissingPrices;
        return this;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      @com.google.api.client.util.Key
      private java.lang.String latencyTolerance;

      /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
     sensitive.
       */
      public java.lang.String getLatencyTolerance() {
        return latencyTolerance;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      public Patch setLatencyTolerance(java.lang.String latencyTolerance) {
        this.latencyTolerance = latencyTolerance;
        return this;
      }

      @Override
      public Patch set(String parameterName, Object value) {
        return (Patch) super.set(parameterName, value);
      }
    }
    /**
     * Updates an in-app product (a managed product or a subscription). This method should no longer be
     * used to update subscriptions. See [this article](https://android-
     * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
     * information.
     *
     * Create a request for the method "inappproducts.update".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param sku Unique identifier for the in-app product.
     * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
     * @return the request
     */
    public Update update(java.lang.String packageName, java.lang.String sku, com.google.api.services.androidpublisher.model.InAppProduct content) throws java.io.IOException {
      Update result = new Update(packageName, sku, content);
      initialize(result);
      return result;
    }

    public class Update extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InAppProduct> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}";

      /**
       * Updates an in-app product (a managed product or a subscription). This method should no longer
       * be used to update subscriptions. See [this article](https://android-
       * developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more
       * information.
       *
       * Create a request for the method "inappproducts.update".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Update#execute()} method to invoke the remote operation.
       * <p> {@link
       * Update#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param sku Unique identifier for the in-app product.
       * @param content the {@link com.google.api.services.androidpublisher.model.InAppProduct}
       * @since 1.13
       */
      protected Update(java.lang.String packageName, java.lang.String sku, com.google.api.services.androidpublisher.model.InAppProduct content) {
        super(AndroidPublisher.this, "PUT", REST_PATH, content, com.google.api.services.androidpublisher.model.InAppProduct.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.sku = com.google.api.client.util.Preconditions.checkNotNull(sku, "Required parameter sku must be specified.");
      }

      @Override
      public Update set$Xgafv(java.lang.String $Xgafv) {
        return (Update) super.set$Xgafv($Xgafv);
      }

      @Override
      public Update setAccessToken(java.lang.String accessToken) {
        return (Update) super.setAccessToken(accessToken);
      }

      @Override
      public Update setAlt(java.lang.String alt) {
        return (Update) super.setAlt(alt);
      }

      @Override
      public Update setCallback(java.lang.String callback) {
        return (Update) super.setCallback(callback);
      }

      @Override
      public Update setFields(java.lang.String fields) {
        return (Update) super.setFields(fields);
      }

      @Override
      public Update setKey(java.lang.String key) {
        return (Update) super.setKey(key);
      }

      @Override
      public Update setOauthToken(java.lang.String oauthToken) {
        return (Update) super.setOauthToken(oauthToken);
      }

      @Override
      public Update setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Update) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Update setQuotaUser(java.lang.String quotaUser) {
        return (Update) super.setQuotaUser(quotaUser);
      }

      @Override
      public Update setUploadType(java.lang.String uploadType) {
        return (Update) super.setUploadType(uploadType);
      }

      @Override
      public Update setUploadProtocol(java.lang.String uploadProtocol) {
        return (Update) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Update setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for the in-app product. */
      @com.google.api.client.util.Key
      private java.lang.String sku;

      /** Unique identifier for the in-app product.
       */
      public java.lang.String getSku() {
        return sku;
      }

      /** Unique identifier for the in-app product. */
      public Update setSku(java.lang.String sku) {
        this.sku = sku;
        return this;
      }

      /**
       * If set to true, and the in-app product with the given package_name and sku doesn't exist,
       * the in-app product will be created.
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean allowMissing;

      /** If set to true, and the in-app product with the given package_name and sku doesn't exist, the in-
     app product will be created.
       */
      public java.lang.Boolean getAllowMissing() {
        return allowMissing;
      }

      /**
       * If set to true, and the in-app product with the given package_name and sku doesn't exist,
       * the in-app product will be created.
       */
      public Update setAllowMissing(java.lang.Boolean allowMissing) {
        this.allowMissing = allowMissing;
        return this;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean autoConvertMissingPrices;

      /** If true the prices for all regions targeted by the parent app that don't have a price specified for
     this in-app product will be auto converted to the target currency based on the default price.
     Defaults to false.
       */
      public java.lang.Boolean getAutoConvertMissingPrices() {
        return autoConvertMissingPrices;
      }

      /**
       * If true the prices for all regions targeted by the parent app that don't have a price
       * specified for this in-app product will be auto converted to the target currency based on
       * the default price. Defaults to false.
       */
      public Update setAutoConvertMissingPrices(java.lang.Boolean autoConvertMissingPrices) {
        this.autoConvertMissingPrices = autoConvertMissingPrices;
        return this;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      @com.google.api.client.util.Key
      private java.lang.String latencyTolerance;

      /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
     sensitive.
       */
      public java.lang.String getLatencyTolerance() {
        return latencyTolerance;
      }

      /**
       * Optional. The latency tolerance for the propagation of this product update. Defaults to
       * latency-sensitive.
       */
      public Update setLatencyTolerance(java.lang.String latencyTolerance) {
        this.latencyTolerance = latencyTolerance;
        return this;
      }

      @Override
      public Update set(String parameterName, Object value) {
        return (Update) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Internalappsharingartifacts collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Internalappsharingartifacts.List request = androidpublisher.internalappsharingartifacts().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Internalappsharingartifacts internalappsharingartifacts() {
    return new Internalappsharingartifacts();
  }

  /**
   * The "internalappsharingartifacts" collection of methods.
   */
  public class Internalappsharingartifacts {

    /**
     * Uploads an APK to internal app sharing. If you are using the Google API client libraries, please
     * increase the timeout of the http request before calling this endpoint (a timeout of 2 minutes is
     * recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
     * library/java/google-api-java-client/errors) for an example in java.
     *
     * Create a request for the method "internalappsharingartifacts.uploadapk".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Uploadapk#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @return the request
     */
    public Uploadapk uploadapk(java.lang.String packageName) throws java.io.IOException {
      Uploadapk result = new Uploadapk(packageName);
      initialize(result);
      return result;
    }

    /**
     * Uploads an APK to internal app sharing. If you are using the Google API client libraries, please
     * increase the timeout of the http request before calling this endpoint (a timeout of 2 minutes is
     * recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
     * library/java/google-api-java-client/errors) for an example in java.
     *
     * Create a request for the method "internalappsharingartifacts.uploadapk".
     *
     * This request holds the parameters needed by the the androidpublisher server.  After setting any
     * optional parameters, call the {@link Uploadapk#execute()} method to invoke the remote operation.
     *
     * <p>
     * This method should be used for uploading media content.
     * </p>
     *
     * @param packageName Package name of the app.
     * @param mediaContent The media HTTP content.
     * @return the request
     * @throws java.io.IOException if the initialization of the request fails
     */
    public Uploadapk uploadapk(java.lang.String packageName, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
      Uploadapk result = new Uploadapk(packageName, mediaContent);
      initialize(result);
      return result;
    }

    public class Uploadapk extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InternalAppSharingArtifact> {

      private static final String REST_PATH = "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/apk";

      /**
       * Uploads an APK to internal app sharing. If you are using the Google API client libraries,
       * please increase the timeout of the http request before calling this endpoint (a timeout of 2
       * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
       * library/java/google-api-java-client/errors) for an example in java.
       *
       * Create a request for the method "internalappsharingartifacts.uploadapk".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Uploadapk#execute()} method to invoke the remote
       * operation. <p> {@link
       * Uploadapk#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @since 1.13
       */
      protected Uploadapk(java.lang.String packageName) {
        super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.InternalAppSharingArtifact.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      /**
       * Uploads an APK to internal app sharing. If you are using the Google API client libraries,
       * please increase the timeout of the http request before calling this endpoint (a timeout of 2
       * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
       * library/java/google-api-java-client/errors) for an example in java.
       *
       * Create a request for the method "internalappsharingartifacts.uploadapk".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Uploadapk#execute()} method to invoke the remote
       * operation. <p> {@link
       * Uploadapk#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * <p>
       * This constructor should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.
       * @param mediaContent The media HTTP content.
       * @since 1.13
       */
      protected Uploadapk(java.lang.String packageName, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
        super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.InternalAppSharingArtifact.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
        initializeMediaUpload(mediaContent);
      }

      @Override
      public Uploadapk set$Xgafv(java.lang.String $Xgafv) {
        return (Uploadapk) super.set$Xgafv($Xgafv);
      }

      @Override
      public Uploadapk setAccessToken(java.lang.String accessToken) {
        return (Uploadapk) super.setAccessToken(accessToken);
      }

      @Override
      public Uploadapk setAlt(java.lang.String alt) {
        return (Uploadapk) super.setAlt(alt);
      }

      @Override
      public Uploadapk setCallback(java.lang.String callback) {
        return (Uploadapk) super.setCallback(callback);
      }

      @Override
      public Uploadapk setFields(java.lang.String fields) {
        return (Uploadapk) super.setFields(fields);
      }

      @Override
      public Uploadapk setKey(java.lang.String key) {
        return (Uploadapk) super.setKey(key);
      }

      @Override
      public Uploadapk setOauthToken(java.lang.String oauthToken) {
        return (Uploadapk) super.setOauthToken(oauthToken);
      }

      @Override
      public Uploadapk setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Uploadapk) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Uploadapk setQuotaUser(java.lang.String quotaUser) {
        return (Uploadapk) super.setQuotaUser(quotaUser);
      }

      @Override
      public Uploadapk setUploadType(java.lang.String uploadType) {
        return (Uploadapk) super.setUploadType(uploadType);
      }

      @Override
      public Uploadapk setUploadProtocol(java.lang.String uploadProtocol) {
        return (Uploadapk) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Uploadapk setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public Uploadapk set(String parameterName, Object value) {
        return (Uploadapk) super.set(parameterName, value);
      }
    }
    /**
     * Uploads an app bundle to internal app sharing. If you are using the Google API client libraries,
     * please increase the timeout of the http request before calling this endpoint (a timeout of 2
     * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
     * library/java/google-api-java-client/errors) for an example in java.
     *
     * Create a request for the method "internalappsharingartifacts.uploadbundle".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Uploadbundle#execute()} method to invoke the remote
     * operation.
     *
     * @param packageName Package name of the app.
     * @return the request
     */
    public Uploadbundle uploadbundle(java.lang.String packageName) throws java.io.IOException {
      Uploadbundle result = new Uploadbundle(packageName);
      initialize(result);
      return result;
    }

    /**
     * Uploads an app bundle to internal app sharing. If you are using the Google API client libraries,
     * please increase the timeout of the http request before calling this endpoint (a timeout of 2
     * minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-
     * library/java/google-api-java-client/errors) for an example in java.
     *
     * Create a request for the method "internalappsharingartifacts.uploadbundle".
     *
     * This request holds the parameters needed by the the androidpublisher server.  After setting any
     * optional parameters, call the {@link Uploadbundle#execute()} method to invoke the remote
     * operation.
     *
     * <p>
     * This method should be used for uploading media content.
     * </p>
     *
     * @param packageName Package name of the app.
     * @param mediaContent The media HTTP content.
     * @return the request
     * @throws java.io.IOException if the initialization of the request fails
     */
    public Uploadbundle uploadbundle(java.lang.String packageName, com.google.api.client.http.AbstractInputStreamContent mediaContent) throws java.io.IOException {
      Uploadbundle result = new Uploadbundle(packageName, mediaContent);
      initialize(result);
      return result;
    }

    public class Uploadbundle extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.InternalAppSharingArtifact> {

      private static final String REST_PATH = "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/bundle";

      /**
       * Uploads an app bundle to internal app sharing. If you are using the Google API client
       * libraries, please increase the timeout of the http request before calling this endpoint (a
       * timeout of 2 minutes is recommended). See [Timeouts and
       * Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors)
       * for an example in java.
       *
       * Create a request for the method "internalappsharingartifacts.uploadbundle".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Uploadbundle#execute()} method to invoke the remote
       * operation. <p> {@link
       * Uploadbundle#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @since 1.13
       */
      protected Uploadbundle(java.lang.String packageName) {
        super(AndroidPublisher.this, "POST", REST_PATH, null, com.google.api.services.androidpublisher.model.InternalAppSharingArtifact.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      /**
       * Uploads an app bundle to internal app sharing. If you are using the Google API client
       * libraries, please increase the timeout of the http request before calling this endpoint (a
       * timeout of 2 minutes is recommended). See [Timeouts and
       * Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors)
       * for an example in java.
       *
       * Create a request for the method "internalappsharingartifacts.uploadbundle".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Uploadbundle#execute()} method to invoke the remote
       * operation. <p> {@link
       * Uploadbundle#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * <p>
       * This constructor should be used for uploading media content.
       * </p>
       *
       * @param packageName Package name of the app.
       * @param mediaContent The media HTTP content.
       * @since 1.13
       */
      protected Uploadbundle(java.lang.String packageName, com.google.api.client.http.AbstractInputStreamContent mediaContent) {
        super(AndroidPublisher.this, "POST", "/upload/" + getServicePath() + REST_PATH, null, com.google.api.services.androidpublisher.model.InternalAppSharingArtifact.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        com.google.api.client.util.Preconditions.checkNotNull(mediaContent, "Required parameter mediaContent must be specified.");
        initializeMediaUpload(mediaContent);
      }

      @Override
      public Uploadbundle set$Xgafv(java.lang.String $Xgafv) {
        return (Uploadbundle) super.set$Xgafv($Xgafv);
      }

      @Override
      public Uploadbundle setAccessToken(java.lang.String accessToken) {
        return (Uploadbundle) super.setAccessToken(accessToken);
      }

      @Override
      public Uploadbundle setAlt(java.lang.String alt) {
        return (Uploadbundle) super.setAlt(alt);
      }

      @Override
      public Uploadbundle setCallback(java.lang.String callback) {
        return (Uploadbundle) super.setCallback(callback);
      }

      @Override
      public Uploadbundle setFields(java.lang.String fields) {
        return (Uploadbundle) super.setFields(fields);
      }

      @Override
      public Uploadbundle setKey(java.lang.String key) {
        return (Uploadbundle) super.setKey(key);
      }

      @Override
      public Uploadbundle setOauthToken(java.lang.String oauthToken) {
        return (Uploadbundle) super.setOauthToken(oauthToken);
      }

      @Override
      public Uploadbundle setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Uploadbundle) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Uploadbundle setQuotaUser(java.lang.String quotaUser) {
        return (Uploadbundle) super.setQuotaUser(quotaUser);
      }

      @Override
      public Uploadbundle setUploadType(java.lang.String uploadType) {
        return (Uploadbundle) super.setUploadType(uploadType);
      }

      @Override
      public Uploadbundle setUploadProtocol(java.lang.String uploadProtocol) {
        return (Uploadbundle) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Uploadbundle setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public Uploadbundle set(String parameterName, Object value) {
        return (Uploadbundle) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Monetization collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Monetization.List request = androidpublisher.monetization().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Monetization monetization() {
    return new Monetization();
  }

  /**
   * The "monetization" collection of methods.
   */
  public class Monetization {

    /**
     * Calculates the region prices, using today's exchange rate and country-specific pricing patterns,
     * based on the price in the request for a set of regions.
     *
     * Create a request for the method "monetization.convertRegionPrices".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link ConvertRegionPrices#execute()} method to invoke the remote
     * operation.
     *
     * @param packageName Required. The app package name.
     * @param content the {@link com.google.api.services.androidpublisher.model.ConvertRegionPricesRequest}
     * @return the request
     */
    public ConvertRegionPrices convertRegionPrices(java.lang.String packageName, com.google.api.services.androidpublisher.model.ConvertRegionPricesRequest content) throws java.io.IOException {
      ConvertRegionPrices result = new ConvertRegionPrices(packageName, content);
      initialize(result);
      return result;
    }

    public class ConvertRegionPrices extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ConvertRegionPricesResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/pricing:convertRegionPrices";

      /**
       * Calculates the region prices, using today's exchange rate and country-specific pricing
       * patterns, based on the price in the request for a set of regions.
       *
       * Create a request for the method "monetization.convertRegionPrices".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link ConvertRegionPrices#execute()} method to invoke the remote
       * operation. <p> {@link ConvertRegionPrices#initialize(com.google.api.client.googleapis.services.
       * AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor. </p>
       *
       * @param packageName Required. The app package name.
       * @param content the {@link com.google.api.services.androidpublisher.model.ConvertRegionPricesRequest}
       * @since 1.13
       */
      protected ConvertRegionPrices(java.lang.String packageName, com.google.api.services.androidpublisher.model.ConvertRegionPricesRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.ConvertRegionPricesResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public ConvertRegionPrices set$Xgafv(java.lang.String $Xgafv) {
        return (ConvertRegionPrices) super.set$Xgafv($Xgafv);
      }

      @Override
      public ConvertRegionPrices setAccessToken(java.lang.String accessToken) {
        return (ConvertRegionPrices) super.setAccessToken(accessToken);
      }

      @Override
      public ConvertRegionPrices setAlt(java.lang.String alt) {
        return (ConvertRegionPrices) super.setAlt(alt);
      }

      @Override
      public ConvertRegionPrices setCallback(java.lang.String callback) {
        return (ConvertRegionPrices) super.setCallback(callback);
      }

      @Override
      public ConvertRegionPrices setFields(java.lang.String fields) {
        return (ConvertRegionPrices) super.setFields(fields);
      }

      @Override
      public ConvertRegionPrices setKey(java.lang.String key) {
        return (ConvertRegionPrices) super.setKey(key);
      }

      @Override
      public ConvertRegionPrices setOauthToken(java.lang.String oauthToken) {
        return (ConvertRegionPrices) super.setOauthToken(oauthToken);
      }

      @Override
      public ConvertRegionPrices setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (ConvertRegionPrices) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public ConvertRegionPrices setQuotaUser(java.lang.String quotaUser) {
        return (ConvertRegionPrices) super.setQuotaUser(quotaUser);
      }

      @Override
      public ConvertRegionPrices setUploadType(java.lang.String uploadType) {
        return (ConvertRegionPrices) super.setUploadType(uploadType);
      }

      @Override
      public ConvertRegionPrices setUploadProtocol(java.lang.String uploadProtocol) {
        return (ConvertRegionPrices) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The app package name. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. The app package name.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Required. The app package name. */
      public ConvertRegionPrices setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      @Override
      public ConvertRegionPrices set(String parameterName, Object value) {
        return (ConvertRegionPrices) super.set(parameterName, value);
      }
    }

    /**
     * An accessor for creating requests from the Onetimeproducts collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Onetimeproducts.List request = androidpublisher.onetimeproducts().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Onetimeproducts onetimeproducts() {
      return new Onetimeproducts();
    }

    /**
     * The "onetimeproducts" collection of methods.
     */
    public class Onetimeproducts {

      /**
       * Deletes one or more one-time products.
       *
       * Create a request for the method "onetimeproducts.batchDelete".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName Required. The parent app (package name) for which the one-time products should be deleted. Must be
       *        equal to the package_name field on all the OneTimeProduct resources.
       * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductsRequest}
       * @return the request
       */
      public BatchDelete batchDelete(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductsRequest content) throws java.io.IOException {
        BatchDelete result = new BatchDelete(packageName, content);
        initialize(result);
        return result;
      }

      public class BatchDelete extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchDelete";

        /**
         * Deletes one or more one-time products.
         *
         * Create a request for the method "onetimeproducts.batchDelete".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
         * operation. <p> {@link
         * BatchDelete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the one-time products should be deleted. Must be
       *        equal to the package_name field on all the OneTimeProduct resources.
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductsRequest}
         * @since 1.13
         */
        protected BatchDelete(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductsRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public BatchDelete set$Xgafv(java.lang.String $Xgafv) {
          return (BatchDelete) super.set$Xgafv($Xgafv);
        }

        @Override
        public BatchDelete setAccessToken(java.lang.String accessToken) {
          return (BatchDelete) super.setAccessToken(accessToken);
        }

        @Override
        public BatchDelete setAlt(java.lang.String alt) {
          return (BatchDelete) super.setAlt(alt);
        }

        @Override
        public BatchDelete setCallback(java.lang.String callback) {
          return (BatchDelete) super.setCallback(callback);
        }

        @Override
        public BatchDelete setFields(java.lang.String fields) {
          return (BatchDelete) super.setFields(fields);
        }

        @Override
        public BatchDelete setKey(java.lang.String key) {
          return (BatchDelete) super.setKey(key);
        }

        @Override
        public BatchDelete setOauthToken(java.lang.String oauthToken) {
          return (BatchDelete) super.setOauthToken(oauthToken);
        }

        @Override
        public BatchDelete setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (BatchDelete) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public BatchDelete setQuotaUser(java.lang.String quotaUser) {
          return (BatchDelete) super.setQuotaUser(quotaUser);
        }

        @Override
        public BatchDelete setUploadType(java.lang.String uploadType) {
          return (BatchDelete) super.setUploadType(uploadType);
        }

        @Override
        public BatchDelete setUploadProtocol(java.lang.String uploadProtocol) {
          return (BatchDelete) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the one-time products should be
         * deleted. Must be equal to the package_name field on all the OneTimeProduct resources.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the one-time products should be deleted. Must be
       equal to the package_name field on all the OneTimeProduct resources.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the one-time products should be
         * deleted. Must be equal to the package_name field on all the OneTimeProduct resources.
         */
        public BatchDelete setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        @Override
        public BatchDelete set(String parameterName, Object value) {
          return (BatchDelete) super.set(parameterName, value);
        }
      }
      /**
       * Reads one or more one-time products.
       *
       * Create a request for the method "onetimeproducts.batchGet".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) for which the products should be retrieved. Must be equal to
       *        the package_name field on all requests.
       * @return the request
       */
      public BatchGet batchGet(java.lang.String packageName) throws java.io.IOException {
        BatchGet result = new BatchGet(packageName);
        initialize(result);
        return result;
      }

      public class BatchGet extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchGetOneTimeProductsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchGet";

        /**
         * Reads one or more one-time products.
         *
         * Create a request for the method "onetimeproducts.batchGet".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
         * <p> {@link
         * BatchGet#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the products should be retrieved. Must be equal to
       *        the package_name field on all requests.
         * @since 1.13
         */
        protected BatchGet(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.BatchGetOneTimeProductsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public BatchGet set$Xgafv(java.lang.String $Xgafv) {
          return (BatchGet) super.set$Xgafv($Xgafv);
        }

        @Override
        public BatchGet setAccessToken(java.lang.String accessToken) {
          return (BatchGet) super.setAccessToken(accessToken);
        }

        @Override
        public BatchGet setAlt(java.lang.String alt) {
          return (BatchGet) super.setAlt(alt);
        }

        @Override
        public BatchGet setCallback(java.lang.String callback) {
          return (BatchGet) super.setCallback(callback);
        }

        @Override
        public BatchGet setFields(java.lang.String fields) {
          return (BatchGet) super.setFields(fields);
        }

        @Override
        public BatchGet setKey(java.lang.String key) {
          return (BatchGet) super.setKey(key);
        }

        @Override
        public BatchGet setOauthToken(java.lang.String oauthToken) {
          return (BatchGet) super.setOauthToken(oauthToken);
        }

        @Override
        public BatchGet setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (BatchGet) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public BatchGet setQuotaUser(java.lang.String quotaUser) {
          return (BatchGet) super.setQuotaUser(quotaUser);
        }

        @Override
        public BatchGet setUploadType(java.lang.String uploadType) {
          return (BatchGet) super.setUploadType(uploadType);
        }

        @Override
        public BatchGet setUploadProtocol(java.lang.String uploadProtocol) {
          return (BatchGet) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the products should be retrieved. Must
         * be equal to the package_name field on all requests.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the products should be retrieved. Must be equal
       to the package_name field on all requests.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the products should be retrieved. Must
         * be equal to the package_name field on all requests.
         */
        public BatchGet setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. A list of up to 100 product IDs to retrieve. All IDs must be different. */
        @com.google.api.client.util.Key
        private java.util.List<java.lang.String> productIds;

        /** Required. A list of up to 100 product IDs to retrieve. All IDs must be different.
         */
        public java.util.List<java.lang.String> getProductIds() {
          return productIds;
        }

        /** Required. A list of up to 100 product IDs to retrieve. All IDs must be different. */
        public BatchGet setProductIds(java.util.List<java.lang.String> productIds) {
          this.productIds = productIds;
          return this;
        }

        @Override
        public BatchGet set(String parameterName, Object value) {
          return (BatchGet) super.set(parameterName, value);
        }
      }
      /**
       * Creates or updates one or more one-time products.
       *
       * Create a request for the method "onetimeproducts.batchUpdate".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName Required. The parent app (package name) for which the one-time products should be updated. Must be
       *        equal to the package_name field on all the OneTimeProduct resources.
       * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsRequest}
       * @return the request
       */
      public BatchUpdate batchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsRequest content) throws java.io.IOException {
        BatchUpdate result = new BatchUpdate(packageName, content);
        initialize(result);
        return result;
      }

      public class BatchUpdate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchUpdate";

        /**
         * Creates or updates one or more one-time products.
         *
         * Create a request for the method "onetimeproducts.batchUpdate".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
         * operation. <p> {@link
         * BatchUpdate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the one-time products should be updated. Must be
       *        equal to the package_name field on all the OneTimeProduct resources.
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsRequest}
         * @since 1.13
         */
        protected BatchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public BatchUpdate set$Xgafv(java.lang.String $Xgafv) {
          return (BatchUpdate) super.set$Xgafv($Xgafv);
        }

        @Override
        public BatchUpdate setAccessToken(java.lang.String accessToken) {
          return (BatchUpdate) super.setAccessToken(accessToken);
        }

        @Override
        public BatchUpdate setAlt(java.lang.String alt) {
          return (BatchUpdate) super.setAlt(alt);
        }

        @Override
        public BatchUpdate setCallback(java.lang.String callback) {
          return (BatchUpdate) super.setCallback(callback);
        }

        @Override
        public BatchUpdate setFields(java.lang.String fields) {
          return (BatchUpdate) super.setFields(fields);
        }

        @Override
        public BatchUpdate setKey(java.lang.String key) {
          return (BatchUpdate) super.setKey(key);
        }

        @Override
        public BatchUpdate setOauthToken(java.lang.String oauthToken) {
          return (BatchUpdate) super.setOauthToken(oauthToken);
        }

        @Override
        public BatchUpdate setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (BatchUpdate) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public BatchUpdate setQuotaUser(java.lang.String quotaUser) {
          return (BatchUpdate) super.setQuotaUser(quotaUser);
        }

        @Override
        public BatchUpdate setUploadType(java.lang.String uploadType) {
          return (BatchUpdate) super.setUploadType(uploadType);
        }

        @Override
        public BatchUpdate setUploadProtocol(java.lang.String uploadProtocol) {
          return (BatchUpdate) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the one-time products should be
         * updated. Must be equal to the package_name field on all the OneTimeProduct resources.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the one-time products should be updated. Must be
       equal to the package_name field on all the OneTimeProduct resources.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the one-time products should be
         * updated. Must be equal to the package_name field on all the OneTimeProduct resources.
         */
        public BatchUpdate setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        @Override
        public BatchUpdate set(String parameterName, Object value) {
          return (BatchUpdate) super.set(parameterName, value);
        }
      }
      /**
       * Deletes a one-time product.
       *
       * Create a request for the method "onetimeproducts.delete".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) of the one-time product to delete.
       * @param productId Required. The one-time product ID of the one-time product to delete.
       * @return the request
       */
      public Delete delete(java.lang.String packageName, java.lang.String productId) throws java.io.IOException {
        Delete result = new Delete(packageName, productId);
        initialize(result);
        return result;
      }

      public class Delete extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}";

        /**
         * Deletes a one-time product.
         *
         * Create a request for the method "onetimeproducts.delete".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) of the one-time product to delete.
         * @param productId Required. The one-time product ID of the one-time product to delete.
         * @since 1.13
         */
        protected Delete(java.lang.String packageName, java.lang.String productId) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

        @Override
        public Delete setAlt(java.lang.String alt) {
          return (Delete) super.setAlt(alt);
        }

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @Override
        public Delete setFields(java.lang.String fields) {
          return (Delete) super.setFields(fields);
        }

        @Override
        public Delete setKey(java.lang.String key) {
          return (Delete) super.setKey(key);
        }

        @Override
        public Delete setOauthToken(java.lang.String oauthToken) {
          return (Delete) super.setOauthToken(oauthToken);
        }

        @Override
        public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Delete) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Delete setQuotaUser(java.lang.String quotaUser) {
          return (Delete) super.setQuotaUser(quotaUser);
        }

        @Override
        public Delete setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) of the one-time product to delete. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) of the one-time product to delete.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) of the one-time product to delete. */
        public Delete setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. The one-time product ID of the one-time product to delete. */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The one-time product ID of the one-time product to delete.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** Required. The one-time product ID of the one-time product to delete. */
        public Delete setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product update. Defaults to
         * latency-sensitive.
         */
        @com.google.api.client.util.Key
        private java.lang.String latencyTolerance;

        /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
       sensitive.
         */
        public java.lang.String getLatencyTolerance() {
          return latencyTolerance;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product update. Defaults to
         * latency-sensitive.
         */
        public Delete setLatencyTolerance(java.lang.String latencyTolerance) {
          this.latencyTolerance = latencyTolerance;
          return this;
        }

        @Override
        public Delete set(String parameterName, Object value) {
          return (Delete) super.set(parameterName, value);
        }
      }
      /**
       * Reads a single one-time product.
       *
       * Create a request for the method "onetimeproducts.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) of the product to retrieve.
       * @param productId Required. The product ID of the product to retrieve.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String productId) throws java.io.IOException {
        Get result = new Get(packageName, productId);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.OneTimeProduct> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}";

        /**
         * Reads a single one-time product.
         *
         * Create a request for the method "onetimeproducts.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) of the product to retrieve.
         * @param productId Required. The product ID of the product to retrieve.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String productId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.OneTimeProduct.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) of the product to retrieve. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) of the product to retrieve.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) of the product to retrieve. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. The product ID of the product to retrieve. */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The product ID of the product to retrieve.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** Required. The product ID of the product to retrieve. */
        public Get setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists all one-time products under a given app.
       *
       * Create a request for the method "onetimeproducts.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) for which the one-time product should be read.
       * @return the request
       */
      public List list(java.lang.String packageName) throws java.io.IOException {
        List result = new List(packageName);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListOneTimeProductsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts";

        /**
         * Lists all one-time products under a given app.
         *
         * Create a request for the method "onetimeproducts.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the one-time product should be read.
         * @since 1.13
         */
        protected List(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListOneTimeProductsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the one-time product should be read.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the one-time product should be read.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the one-time product should be read.
         */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Optional. The maximum number of one-time product to return. The service may return fewer
         * than this value. If unspecified, at most 50 one-time products will be returned. The
         * maximum value is 1000; values above 1000 will be coerced to 1000.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** Optional. The maximum number of one-time product to return. The service may return fewer than this
       value. If unspecified, at most 50 one-time products will be returned. The maximum value is 1000;
       values above 1000 will be coerced to 1000.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /**
         * Optional. The maximum number of one-time product to return. The service may return fewer
         * than this value. If unspecified, at most 50 one-time products will be returned. The
         * maximum value is 1000; values above 1000 will be coerced to 1000.
         */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * Optional. A page token, received from a previous `ListOneTimeProducts` call. Provide this
         * to retrieve the subsequent page. When paginating, all other parameters provided to
         * `ListOneTimeProducts` must match the call that provided the page token.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** Optional. A page token, received from a previous `ListOneTimeProducts` call. Provide this to
       retrieve the subsequent page. When paginating, all other parameters provided to
       `ListOneTimeProducts` must match the call that provided the page token.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * Optional. A page token, received from a previous `ListOneTimeProducts` call. Provide this
         * to retrieve the subsequent page. When paginating, all other parameters provided to
         * `ListOneTimeProducts` must match the call that provided the page token.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Creates or updates a one-time product.
       *
       * Create a request for the method "onetimeproducts.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. Immutable. Package name of the parent app.
       * @param productId Required. Immutable. Unique product ID of the product. Unique within the parent app. Product IDs
       *        must start with a number or lowercase letter, and can contain numbers (0-9), lowercase
       *        letters (a-z), underscores (_), and periods (.).
       * @param content the {@link com.google.api.services.androidpublisher.model.OneTimeProduct}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.OneTimeProduct content) throws java.io.IOException {
        Patch result = new Patch(packageName, productId, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.OneTimeProduct> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/onetimeproducts/{productId}";

        /**
         * Creates or updates a one-time product.
         *
         * Create a request for the method "onetimeproducts.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. Immutable. Package name of the parent app.
         * @param productId Required. Immutable. Unique product ID of the product. Unique within the parent app. Product IDs
       *        must start with a number or lowercase letter, and can contain numbers (0-9), lowercase
       *        letters (a-z), underscores (_), and periods (.).
         * @param content the {@link com.google.api.services.androidpublisher.model.OneTimeProduct}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.OneTimeProduct content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.OneTimeProduct.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. Immutable. Package name of the parent app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. Immutable. Package name of the parent app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. Immutable. Package name of the parent app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. Immutable. Unique product ID of the product. Unique within the parent app.
         * Product IDs must start with a number or lowercase letter, and can contain numbers (0-9),
         * lowercase letters (a-z), underscores (_), and periods (.).
         */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. Immutable. Unique product ID of the product. Unique within the parent app. Product IDs
       must start with a number or lowercase letter, and can contain numbers (0-9), lowercase letters
       (a-z), underscores (_), and periods (.).
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /**
         * Required. Immutable. Unique product ID of the product. Unique within the parent app.
         * Product IDs must start with a number or lowercase letter, and can contain numbers (0-9),
         * lowercase letters (a-z), underscores (_), and periods (.).
         */
        public Patch setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /**
         * Optional. If set to true, and the one-time product with the given package_name and
         * product_id doesn't exist, the one-time product will be created. If a new one-time product
         * is created, update_mask is ignored.
         */
        @com.google.api.client.util.Key
        private java.lang.Boolean allowMissing;

        /** Optional. If set to true, and the one-time product with the given package_name and product_id
       doesn't exist, the one-time product will be created. If a new one-time product is created,
       update_mask is ignored.
         */
        public java.lang.Boolean getAllowMissing() {
          return allowMissing;
        }

        /**
         * Optional. If set to true, and the one-time product with the given package_name and
         * product_id doesn't exist, the one-time product will be created. If a new one-time product
         * is created, update_mask is ignored.
         */
        public Patch setAllowMissing(java.lang.Boolean allowMissing) {
          this.allowMissing = allowMissing;
          return this;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product upsert. Defaults to
         * latency-sensitive.
         */
        @com.google.api.client.util.Key
        private java.lang.String latencyTolerance;

        /** Optional. The latency tolerance for the propagation of this product upsert. Defaults to latency-
       sensitive.
         */
        public java.lang.String getLatencyTolerance() {
          return latencyTolerance;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product upsert. Defaults to
         * latency-sensitive.
         */
        public Patch setLatencyTolerance(java.lang.String latencyTolerance) {
          this.latencyTolerance = latencyTolerance;
          return this;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        @com.google.api.client.util.Key("regionsVersion.version")
        private java.lang.String regionsVersionVersion;

        /** Required. A string representing the version of available regions being used for the specified
       resource. Regional prices and latest supported version for the resource have to be specified
       according to the information published in [this
       article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the
       supported locations substantially change, the version will be incremented. Using this field will
       ensure that creating and updating the resource with an older region's version and set of regional
       prices and currencies will succeed even though a new version is available.
         */
        public java.lang.String getRegionsVersionVersion() {
          return regionsVersionVersion;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        public Patch setRegionsVersionVersion(java.lang.String regionsVersionVersion) {
          this.regionsVersionVersion = regionsVersionVersion;
          return this;
        }

        /** Required. The list of fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Required. The list of fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Required. The list of fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }

      /**
       * An accessor for creating requests from the PurchaseOptions collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
       *   {@code AndroidPublisher.PurchaseOptions.List request = androidpublisher.purchaseOptions().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public PurchaseOptions purchaseOptions() {
        return new PurchaseOptions();
      }

      /**
       * The "purchaseOptions" collection of methods.
       */
      public class PurchaseOptions {

        /**
         * Deletes purchase options across one or multiple one-time products. By default this operation will
         * fail if there are any existing offers under the deleted purchase options. Use the force parameter
         * to override the default behavior.
         *
         * Create a request for the method "purchaseOptions.batchDelete".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
         * operation.
         *
         * @param packageName Required. The parent app (package name) of the purchase options to delete.
         * @param productId Required. The product ID of the parent one-time product, if all purchase options to delete belong to
         *        the same one-time product. If this batch delete spans multiple one-time products, set this
         *        field to "-".
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeletePurchaseOptionsRequest}
         * @return the request
         */
        public BatchDelete batchDelete(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchDeletePurchaseOptionsRequest content) throws java.io.IOException {
          BatchDelete result = new BatchDelete(packageName, productId, content);
          initialize(result);
          return result;
        }

        public class BatchDelete extends AndroidPublisherRequest<Void> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchDelete";

          /**
           * Deletes purchase options across one or multiple one-time products. By default this operation
           * will fail if there are any existing offers under the deleted purchase options. Use the force
           * parameter to override the default behavior.
           *
           * Create a request for the method "purchaseOptions.batchDelete".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
           * operation. <p> {@link
           * BatchDelete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the purchase options to delete.
           * @param productId Required. The product ID of the parent one-time product, if all purchase options to delete belong to
         *        the same one-time product. If this batch delete spans multiple one-time products, set this
         *        field to "-".
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeletePurchaseOptionsRequest}
           * @since 1.13
           */
          protected BatchDelete(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchDeletePurchaseOptionsRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          }

          @Override
          public BatchDelete set$Xgafv(java.lang.String $Xgafv) {
            return (BatchDelete) super.set$Xgafv($Xgafv);
          }

          @Override
          public BatchDelete setAccessToken(java.lang.String accessToken) {
            return (BatchDelete) super.setAccessToken(accessToken);
          }

          @Override
          public BatchDelete setAlt(java.lang.String alt) {
            return (BatchDelete) super.setAlt(alt);
          }

          @Override
          public BatchDelete setCallback(java.lang.String callback) {
            return (BatchDelete) super.setCallback(callback);
          }

          @Override
          public BatchDelete setFields(java.lang.String fields) {
            return (BatchDelete) super.setFields(fields);
          }

          @Override
          public BatchDelete setKey(java.lang.String key) {
            return (BatchDelete) super.setKey(key);
          }

          @Override
          public BatchDelete setOauthToken(java.lang.String oauthToken) {
            return (BatchDelete) super.setOauthToken(oauthToken);
          }

          @Override
          public BatchDelete setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (BatchDelete) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public BatchDelete setQuotaUser(java.lang.String quotaUser) {
            return (BatchDelete) super.setQuotaUser(quotaUser);
          }

          @Override
          public BatchDelete setUploadType(java.lang.String uploadType) {
            return (BatchDelete) super.setUploadType(uploadType);
          }

          @Override
          public BatchDelete setUploadProtocol(java.lang.String uploadProtocol) {
            return (BatchDelete) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the purchase options to delete. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the purchase options to delete.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the purchase options to delete. */
          public BatchDelete setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /**
           * Required. The product ID of the parent one-time product, if all purchase options to
           * delete belong to the same one-time product. If this batch delete spans multiple one-
           * time products, set this field to "-".
           */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The product ID of the parent one-time product, if all purchase options to delete belong
         to the same one-time product. If this batch delete spans multiple one-time products, set this field
         to "-".
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /**
           * Required. The product ID of the parent one-time product, if all purchase options to
           * delete belong to the same one-time product. If this batch delete spans multiple one-
           * time products, set this field to "-".
           */
          public BatchDelete setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          @Override
          public BatchDelete set(String parameterName, Object value) {
            return (BatchDelete) super.set(parameterName, value);
          }
        }
        /**
         * Activates or deactivates purchase options across one or multiple one-time products.
         *
         * Create a request for the method "purchaseOptions.batchUpdateStates".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
         * operation.
         *
         * @param packageName Required. The parent app (package name) of the updated purchase options.
         * @param productId Required. The product ID of the parent one-time product, if all updated purchase options belong to
         *        the same one-time product. If this batch update spans multiple one-time products, set this
         *        field to "-".
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesRequest}
         * @return the request
         */
        public BatchUpdateStates batchUpdateStates(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesRequest content) throws java.io.IOException {
          BatchUpdateStates result = new BatchUpdateStates(packageName, productId, content);
          initialize(result);
          return result;
        }

        public class BatchUpdateStates extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesResponse> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchUpdateStates";

          /**
           * Activates or deactivates purchase options across one or multiple one-time products.
           *
           * Create a request for the method "purchaseOptions.batchUpdateStates".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
           * operation. <p> {@link BatchUpdateStates#initialize(com.google.api.client.googleapis.services.Ab
           * stractGoogleClientRequest)} must be called to initialize this instance immediately after
           * invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the updated purchase options.
           * @param productId Required. The product ID of the parent one-time product, if all updated purchase options belong to
         *        the same one-time product. If this batch update spans multiple one-time products, set this
         *        field to "-".
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesRequest}
           * @since 1.13
           */
          protected BatchUpdateStates(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdatePurchaseOptionStatesResponse.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          }

          @Override
          public BatchUpdateStates set$Xgafv(java.lang.String $Xgafv) {
            return (BatchUpdateStates) super.set$Xgafv($Xgafv);
          }

          @Override
          public BatchUpdateStates setAccessToken(java.lang.String accessToken) {
            return (BatchUpdateStates) super.setAccessToken(accessToken);
          }

          @Override
          public BatchUpdateStates setAlt(java.lang.String alt) {
            return (BatchUpdateStates) super.setAlt(alt);
          }

          @Override
          public BatchUpdateStates setCallback(java.lang.String callback) {
            return (BatchUpdateStates) super.setCallback(callback);
          }

          @Override
          public BatchUpdateStates setFields(java.lang.String fields) {
            return (BatchUpdateStates) super.setFields(fields);
          }

          @Override
          public BatchUpdateStates setKey(java.lang.String key) {
            return (BatchUpdateStates) super.setKey(key);
          }

          @Override
          public BatchUpdateStates setOauthToken(java.lang.String oauthToken) {
            return (BatchUpdateStates) super.setOauthToken(oauthToken);
          }

          @Override
          public BatchUpdateStates setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (BatchUpdateStates) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public BatchUpdateStates setQuotaUser(java.lang.String quotaUser) {
            return (BatchUpdateStates) super.setQuotaUser(quotaUser);
          }

          @Override
          public BatchUpdateStates setUploadType(java.lang.String uploadType) {
            return (BatchUpdateStates) super.setUploadType(uploadType);
          }

          @Override
          public BatchUpdateStates setUploadProtocol(java.lang.String uploadProtocol) {
            return (BatchUpdateStates) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the updated purchase options. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the updated purchase options.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the updated purchase options. */
          public BatchUpdateStates setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /**
           * Required. The product ID of the parent one-time product, if all updated purchase
           * options belong to the same one-time product. If this batch update spans multiple one-
           * time products, set this field to "-".
           */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The product ID of the parent one-time product, if all updated purchase options belong to
         the same one-time product. If this batch update spans multiple one-time products, set this field to
         "-".
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /**
           * Required. The product ID of the parent one-time product, if all updated purchase
           * options belong to the same one-time product. If this batch update spans multiple one-
           * time products, set this field to "-".
           */
          public BatchUpdateStates setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          @Override
          public BatchUpdateStates set(String parameterName, Object value) {
            return (BatchUpdateStates) super.set(parameterName, value);
          }
        }

        /**
         * An accessor for creating requests from the Offers collection.
         *
         * <p>The typical use is:</p>
         * <pre>
         *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
         *   {@code AndroidPublisher.Offers.List request = androidpublisher.offers().list(parameters ...)}
         * </pre>
         *
         * @return the resource collection
         */
        public Offers offers() {
          return new Offers();
        }

        /**
         * The "offers" collection of methods.
         */
        public class Offers {

          /**
           * Activates a one-time product offer.
           *
           * Create a request for the method "offers.activate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to activate.
           * @param productId Required. The parent one-time product (ID) of the offer to activate.
           * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to activate.
           * @param offerId Required. The offer ID of the offer to activate.
           * @param content the {@link com.google.api.services.androidpublisher.model.ActivateOneTimeProductOfferRequest}
           * @return the request
           */
          public Activate activate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.ActivateOneTimeProductOfferRequest content) throws java.io.IOException {
            Activate result = new Activate(packageName, productId, purchaseOptionId, offerId, content);
            initialize(result);
            return result;
          }

          public class Activate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.OneTimeProductOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:activate";

            /**
             * Activates a one-time product offer.
             *
             * Create a request for the method "offers.activate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
             * <p> {@link
             * Activate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to activate.
             * @param productId Required. The parent one-time product (ID) of the offer to activate.
             * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to activate.
             * @param offerId Required. The offer ID of the offer to activate.
             * @param content the {@link com.google.api.services.androidpublisher.model.ActivateOneTimeProductOfferRequest}
             * @since 1.13
             */
            protected Activate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.ActivateOneTimeProductOfferRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.OneTimeProductOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Activate set$Xgafv(java.lang.String $Xgafv) {
              return (Activate) super.set$Xgafv($Xgafv);
            }

            @Override
            public Activate setAccessToken(java.lang.String accessToken) {
              return (Activate) super.setAccessToken(accessToken);
            }

            @Override
            public Activate setAlt(java.lang.String alt) {
              return (Activate) super.setAlt(alt);
            }

            @Override
            public Activate setCallback(java.lang.String callback) {
              return (Activate) super.setCallback(callback);
            }

            @Override
            public Activate setFields(java.lang.String fields) {
              return (Activate) super.setFields(fields);
            }

            @Override
            public Activate setKey(java.lang.String key) {
              return (Activate) super.setKey(key);
            }

            @Override
            public Activate setOauthToken(java.lang.String oauthToken) {
              return (Activate) super.setOauthToken(oauthToken);
            }

            @Override
            public Activate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Activate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Activate setQuotaUser(java.lang.String quotaUser) {
              return (Activate) super.setQuotaUser(quotaUser);
            }

            @Override
            public Activate setUploadType(java.lang.String uploadType) {
              return (Activate) super.setUploadType(uploadType);
            }

            @Override
            public Activate setUploadProtocol(java.lang.String uploadProtocol) {
              return (Activate) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to activate.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to activate. */
            public Activate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent one-time product (ID) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent one-time product (ID) of the offer to activate.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent one-time product (ID) of the offer to activate. */
            public Activate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent purchase option (ID) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) of the offer to activate.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /** Required. The parent purchase option (ID) of the offer to activate. */
            public Activate setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            /** Required. The offer ID of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The offer ID of the offer to activate.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The offer ID of the offer to activate. */
            public Activate setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Activate set(String parameterName, Object value) {
              return (Activate) super.set(parameterName, value);
            }
          }
          /**
           * Deletes one or more one-time product offers.
           *
           * Create a request for the method "offers.batchDelete".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
           * operation.
           *
           * @param packageName Required. The parent app (package name) of the offers to delete. Must be equal to the package_name
           *        field on all the OneTimeProductOffer resources.
           * @param productId Required. The product ID of the parent one-time product, if all offers to delete belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
           * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be deleted. May be specified
           *        as '-' to update offers from multiple purchase options.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductOffersRequest}
           * @return the request
           */
          public BatchDelete batchDelete(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductOffersRequest content) throws java.io.IOException {
            BatchDelete result = new BatchDelete(packageName, productId, purchaseOptionId, content);
            initialize(result);
            return result;
          }

          public class BatchDelete extends AndroidPublisherRequest<Void> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchDelete";

            /**
             * Deletes one or more one-time product offers.
             *
             * Create a request for the method "offers.batchDelete".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchDelete#execute()} method to invoke the remote
             * operation. <p> {@link
             * BatchDelete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offers to delete. Must be equal to the package_name
           *        field on all the OneTimeProductOffer resources.
             * @param productId Required. The product ID of the parent one-time product, if all offers to delete belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
             * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be deleted. May be specified
           *        as '-' to update offers from multiple purchase options.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductOffersRequest}
             * @since 1.13
             */
            protected BatchDelete(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchDeleteOneTimeProductOffersRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
            }

            @Override
            public BatchDelete set$Xgafv(java.lang.String $Xgafv) {
              return (BatchDelete) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchDelete setAccessToken(java.lang.String accessToken) {
              return (BatchDelete) super.setAccessToken(accessToken);
            }

            @Override
            public BatchDelete setAlt(java.lang.String alt) {
              return (BatchDelete) super.setAlt(alt);
            }

            @Override
            public BatchDelete setCallback(java.lang.String callback) {
              return (BatchDelete) super.setCallback(callback);
            }

            @Override
            public BatchDelete setFields(java.lang.String fields) {
              return (BatchDelete) super.setFields(fields);
            }

            @Override
            public BatchDelete setKey(java.lang.String key) {
              return (BatchDelete) super.setKey(key);
            }

            @Override
            public BatchDelete setOauthToken(java.lang.String oauthToken) {
              return (BatchDelete) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchDelete setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchDelete) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchDelete setQuotaUser(java.lang.String quotaUser) {
              return (BatchDelete) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchDelete setUploadType(java.lang.String uploadType) {
              return (BatchDelete) super.setUploadType(uploadType);
            }

            @Override
            public BatchDelete setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchDelete) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) of the offers to delete. Must be equal to the
             * package_name field on all the OneTimeProductOffer resources.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offers to delete. Must be equal to the package_name
           field on all the OneTimeProductOffer resources.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) of the offers to delete. Must be equal to the
             * package_name field on all the OneTimeProductOffer resources.
             */
            public BatchDelete setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent one-time product, if all offers to delete
             * belong to the same product. If this request spans multiple one-time products, set
             * this field to "-".
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent one-time product, if all offers to delete belong to the same
           product. If this request spans multiple one-time products, set this field to "-".
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent one-time product, if all offers to delete
             * belong to the same product. If this request spans multiple one-time products, set
             * this field to "-".
             */
            public BatchDelete setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be deleted. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) for which the offers should be deleted. May be specified
           as '-' to update offers from multiple purchase options.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be deleted. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            public BatchDelete setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            @Override
            public BatchDelete set(String parameterName, Object value) {
              return (BatchDelete) super.set(parameterName, value);
            }
          }
          /**
           * Reads one or more one-time product offers.
           *
           * Create a request for the method "offers.batchGet".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           *        field on all the updated OneTimeProductOffer resources.
           * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
           * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           *        as '-' to update offers from multiple purchase options.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersRequest}
           * @return the request
           */
          public BatchGet batchGet(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersRequest content) throws java.io.IOException {
            BatchGet result = new BatchGet(packageName, productId, purchaseOptionId, content);
            initialize(result);
            return result;
          }

          public class BatchGet extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchGet";

            /**
             * Reads one or more one-time product offers.
             *
             * Create a request for the method "offers.batchGet".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
             * <p> {@link
             * BatchGet#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           *        field on all the updated OneTimeProductOffer resources.
             * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
             * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           *        as '-' to update offers from multiple purchase options.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersRequest}
             * @since 1.13
             */
            protected BatchGet(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchGetOneTimeProductOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
            }

            @Override
            public BatchGet set$Xgafv(java.lang.String $Xgafv) {
              return (BatchGet) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchGet setAccessToken(java.lang.String accessToken) {
              return (BatchGet) super.setAccessToken(accessToken);
            }

            @Override
            public BatchGet setAlt(java.lang.String alt) {
              return (BatchGet) super.setAlt(alt);
            }

            @Override
            public BatchGet setCallback(java.lang.String callback) {
              return (BatchGet) super.setCallback(callback);
            }

            @Override
            public BatchGet setFields(java.lang.String fields) {
              return (BatchGet) super.setFields(fields);
            }

            @Override
            public BatchGet setKey(java.lang.String key) {
              return (BatchGet) super.setKey(key);
            }

            @Override
            public BatchGet setOauthToken(java.lang.String oauthToken) {
              return (BatchGet) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchGet setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchGet) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchGet setQuotaUser(java.lang.String quotaUser) {
              return (BatchGet) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchGet setUploadType(java.lang.String uploadType) {
              return (BatchGet) super.setUploadType(uploadType);
            }

            @Override
            public BatchGet setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchGet) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) of the updated offers. Must be equal to the
             * package_name field on all the updated OneTimeProductOffer resources.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           field on all the updated OneTimeProductOffer resources.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) of the updated offers. Must be equal to the
             * package_name field on all the updated OneTimeProductOffer resources.
             */
            public BatchGet setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same product. If this request spans multiple one-time products, set this field
             * to "-".
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent one-time product, if all updated offers belong to the same
           product. If this request spans multiple one-time products, set this field to "-".
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same product. If this request spans multiple one-time products, set this field
             * to "-".
             */
            public BatchGet setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be updated. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           as '-' to update offers from multiple purchase options.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be updated. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            public BatchGet setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            @Override
            public BatchGet set(String parameterName, Object value) {
              return (BatchGet) super.set(parameterName, value);
            }
          }
          /**
           * Creates or updates one or more one-time product offers.
           *
           * Create a request for the method "offers.batchUpdate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
           * operation.
           *
           * @param packageName Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           *        field on all the updated OneTimeProductOffer resources.
           * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
           * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           *        as '-' to update offers from multiple purchase options.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersRequest}
           * @return the request
           */
          public BatchUpdate batchUpdate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersRequest content) throws java.io.IOException {
            BatchUpdate result = new BatchUpdate(packageName, productId, purchaseOptionId, content);
            initialize(result);
            return result;
          }

          public class BatchUpdate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdate";

            /**
             * Creates or updates one or more one-time product offers.
             *
             * Create a request for the method "offers.batchUpdate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
             * operation. <p> {@link
             * BatchUpdate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           *        field on all the updated OneTimeProductOffer resources.
             * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        product. If this request spans multiple one-time products, set this field to "-".
             * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           *        as '-' to update offers from multiple purchase options.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersRequest}
             * @since 1.13
             */
            protected BatchUpdate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
            }

            @Override
            public BatchUpdate set$Xgafv(java.lang.String $Xgafv) {
              return (BatchUpdate) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchUpdate setAccessToken(java.lang.String accessToken) {
              return (BatchUpdate) super.setAccessToken(accessToken);
            }

            @Override
            public BatchUpdate setAlt(java.lang.String alt) {
              return (BatchUpdate) super.setAlt(alt);
            }

            @Override
            public BatchUpdate setCallback(java.lang.String callback) {
              return (BatchUpdate) super.setCallback(callback);
            }

            @Override
            public BatchUpdate setFields(java.lang.String fields) {
              return (BatchUpdate) super.setFields(fields);
            }

            @Override
            public BatchUpdate setKey(java.lang.String key) {
              return (BatchUpdate) super.setKey(key);
            }

            @Override
            public BatchUpdate setOauthToken(java.lang.String oauthToken) {
              return (BatchUpdate) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchUpdate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchUpdate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchUpdate setQuotaUser(java.lang.String quotaUser) {
              return (BatchUpdate) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchUpdate setUploadType(java.lang.String uploadType) {
              return (BatchUpdate) super.setUploadType(uploadType);
            }

            @Override
            public BatchUpdate setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchUpdate) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) of the updated offers. Must be equal to the
             * package_name field on all the updated OneTimeProductOffer resources.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the updated offers. Must be equal to the package_name
           field on all the updated OneTimeProductOffer resources.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) of the updated offers. Must be equal to the
             * package_name field on all the updated OneTimeProductOffer resources.
             */
            public BatchUpdate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same product. If this request spans multiple one-time products, set this field
             * to "-".
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent one-time product, if all updated offers belong to the same
           product. If this request spans multiple one-time products, set this field to "-".
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same product. If this request spans multiple one-time products, set this field
             * to "-".
             */
            public BatchUpdate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be updated. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) for which the offers should be updated. May be specified
           as '-' to update offers from multiple purchase options.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be updated. May
             * be specified as '-' to update offers from multiple purchase options.
             */
            public BatchUpdate setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            @Override
            public BatchUpdate set(String parameterName, Object value) {
              return (BatchUpdate) super.set(parameterName, value);
            }
          }
          /**
           * Updates a batch of one-time product offer states.
           *
           * Create a request for the method "offers.batchUpdateStates".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
           * operation.
           *
           * @param packageName Required. The parent app (package name) of the updated one-time product offers.
           * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        one-time product. If this batch update spans multiple one-time products, set this field to
           *        "-".
           * @param purchaseOptionId Required. The purchase option ID of the parent purchase option, if all updated offers belong to the
           *        same purchase option. If this batch update spans multiple purchase options, set this field
           *        to "-".
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesRequest}
           * @return the request
           */
          public BatchUpdateStates batchUpdateStates(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesRequest content) throws java.io.IOException {
            BatchUpdateStates result = new BatchUpdateStates(packageName, productId, purchaseOptionId, content);
            initialize(result);
            return result;
          }

          public class BatchUpdateStates extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdateStates";

            /**
             * Updates a batch of one-time product offer states.
             *
             * Create a request for the method "offers.batchUpdateStates".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
             * operation. <p> {@link BatchUpdateStates#initialize(com.google.api.client.googleapis.services.Ab
             * stractGoogleClientRequest)} must be called to initialize this instance immediately after
             * invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the updated one-time product offers.
             * @param productId Required. The product ID of the parent one-time product, if all updated offers belong to the same
           *        one-time product. If this batch update spans multiple one-time products, set this field to
           *        "-".
             * @param purchaseOptionId Required. The purchase option ID of the parent purchase option, if all updated offers belong to the
           *        same purchase option. If this batch update spans multiple purchase options, set this field
           *        to "-".
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesRequest}
             * @since 1.13
             */
            protected BatchUpdateStates(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateOneTimeProductOfferStatesResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
            }

            @Override
            public BatchUpdateStates set$Xgafv(java.lang.String $Xgafv) {
              return (BatchUpdateStates) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchUpdateStates setAccessToken(java.lang.String accessToken) {
              return (BatchUpdateStates) super.setAccessToken(accessToken);
            }

            @Override
            public BatchUpdateStates setAlt(java.lang.String alt) {
              return (BatchUpdateStates) super.setAlt(alt);
            }

            @Override
            public BatchUpdateStates setCallback(java.lang.String callback) {
              return (BatchUpdateStates) super.setCallback(callback);
            }

            @Override
            public BatchUpdateStates setFields(java.lang.String fields) {
              return (BatchUpdateStates) super.setFields(fields);
            }

            @Override
            public BatchUpdateStates setKey(java.lang.String key) {
              return (BatchUpdateStates) super.setKey(key);
            }

            @Override
            public BatchUpdateStates setOauthToken(java.lang.String oauthToken) {
              return (BatchUpdateStates) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchUpdateStates setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchUpdateStates) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchUpdateStates setQuotaUser(java.lang.String quotaUser) {
              return (BatchUpdateStates) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchUpdateStates setUploadType(java.lang.String uploadType) {
              return (BatchUpdateStates) super.setUploadType(uploadType);
            }

            @Override
            public BatchUpdateStates setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchUpdateStates) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the updated one-time product offers. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the updated one-time product offers.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the updated one-time product offers. */
            public BatchUpdateStates setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same one-time product. If this batch update spans multiple one-time products,
             * set this field to "-".
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent one-time product, if all updated offers belong to the same
           one-time product. If this batch update spans multiple one-time products, set this field to "-".
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent one-time product, if all updated offers belong
             * to the same one-time product. If this batch update spans multiple one-time products,
             * set this field to "-".
             */
            public BatchUpdateStates setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The purchase option ID of the parent purchase option, if all updated offers
             * belong to the same purchase option. If this batch update spans multiple purchase
             * options, set this field to "-".
             */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The purchase option ID of the parent purchase option, if all updated offers belong to the
           same purchase option. If this batch update spans multiple purchase options, set this field to "-".
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /**
             * Required. The purchase option ID of the parent purchase option, if all updated offers
             * belong to the same purchase option. If this batch update spans multiple purchase
             * options, set this field to "-".
             */
            public BatchUpdateStates setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            @Override
            public BatchUpdateStates set(String parameterName, Object value) {
              return (BatchUpdateStates) super.set(parameterName, value);
            }
          }
          /**
           * Cancels a one-time product offer.
           *
           * Create a request for the method "offers.cancel".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to cancel.
           * @param productId Required. The parent one-time product (ID) of the offer to cancel.
           * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to cancel.
           * @param offerId Required. The offer ID of the offer to cancel.
           * @param content the {@link com.google.api.services.androidpublisher.model.CancelOneTimeProductOfferRequest}
           * @return the request
           */
          public Cancel cancel(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.CancelOneTimeProductOfferRequest content) throws java.io.IOException {
            Cancel result = new Cancel(packageName, productId, purchaseOptionId, offerId, content);
            initialize(result);
            return result;
          }

          public class Cancel extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.OneTimeProductOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:cancel";

            /**
             * Cancels a one-time product offer.
             *
             * Create a request for the method "offers.cancel".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
             * <p> {@link
             * Cancel#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
             * be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to cancel.
             * @param productId Required. The parent one-time product (ID) of the offer to cancel.
             * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to cancel.
             * @param offerId Required. The offer ID of the offer to cancel.
             * @param content the {@link com.google.api.services.androidpublisher.model.CancelOneTimeProductOfferRequest}
             * @since 1.13
             */
            protected Cancel(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.CancelOneTimeProductOfferRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.OneTimeProductOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Cancel set$Xgafv(java.lang.String $Xgafv) {
              return (Cancel) super.set$Xgafv($Xgafv);
            }

            @Override
            public Cancel setAccessToken(java.lang.String accessToken) {
              return (Cancel) super.setAccessToken(accessToken);
            }

            @Override
            public Cancel setAlt(java.lang.String alt) {
              return (Cancel) super.setAlt(alt);
            }

            @Override
            public Cancel setCallback(java.lang.String callback) {
              return (Cancel) super.setCallback(callback);
            }

            @Override
            public Cancel setFields(java.lang.String fields) {
              return (Cancel) super.setFields(fields);
            }

            @Override
            public Cancel setKey(java.lang.String key) {
              return (Cancel) super.setKey(key);
            }

            @Override
            public Cancel setOauthToken(java.lang.String oauthToken) {
              return (Cancel) super.setOauthToken(oauthToken);
            }

            @Override
            public Cancel setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Cancel) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Cancel setQuotaUser(java.lang.String quotaUser) {
              return (Cancel) super.setQuotaUser(quotaUser);
            }

            @Override
            public Cancel setUploadType(java.lang.String uploadType) {
              return (Cancel) super.setUploadType(uploadType);
            }

            @Override
            public Cancel setUploadProtocol(java.lang.String uploadProtocol) {
              return (Cancel) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to cancel. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to cancel.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to cancel. */
            public Cancel setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent one-time product (ID) of the offer to cancel. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent one-time product (ID) of the offer to cancel.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent one-time product (ID) of the offer to cancel. */
            public Cancel setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent purchase option (ID) of the offer to cancel. */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) of the offer to cancel.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /** Required. The parent purchase option (ID) of the offer to cancel. */
            public Cancel setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            /** Required. The offer ID of the offer to cancel. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The offer ID of the offer to cancel.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The offer ID of the offer to cancel. */
            public Cancel setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Cancel set(String parameterName, Object value) {
              return (Cancel) super.set(parameterName, value);
            }
          }
          /**
           * Deactivates a one-time product offer.
           *
           * Create a request for the method "offers.deactivate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to deactivate.
           * @param productId Required. The parent one-time product (ID) of the offer to deactivate.
           * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to deactivate.
           * @param offerId Required. The offer ID of the offer to deactivate.
           * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateOneTimeProductOfferRequest}
           * @return the request
           */
          public Deactivate deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.DeactivateOneTimeProductOfferRequest content) throws java.io.IOException {
            Deactivate result = new Deactivate(packageName, productId, purchaseOptionId, offerId, content);
            initialize(result);
            return result;
          }

          public class Deactivate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.OneTimeProductOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:deactivate";

            /**
             * Deactivates a one-time product offer.
             *
             * Create a request for the method "offers.deactivate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote
             * operation. <p> {@link
             * Deactivate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to deactivate.
             * @param productId Required. The parent one-time product (ID) of the offer to deactivate.
             * @param purchaseOptionId Required. The parent purchase option (ID) of the offer to deactivate.
             * @param offerId Required. The offer ID of the offer to deactivate.
             * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateOneTimeProductOfferRequest}
             * @since 1.13
             */
            protected Deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId, java.lang.String offerId, com.google.api.services.androidpublisher.model.DeactivateOneTimeProductOfferRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.OneTimeProductOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Deactivate set$Xgafv(java.lang.String $Xgafv) {
              return (Deactivate) super.set$Xgafv($Xgafv);
            }

            @Override
            public Deactivate setAccessToken(java.lang.String accessToken) {
              return (Deactivate) super.setAccessToken(accessToken);
            }

            @Override
            public Deactivate setAlt(java.lang.String alt) {
              return (Deactivate) super.setAlt(alt);
            }

            @Override
            public Deactivate setCallback(java.lang.String callback) {
              return (Deactivate) super.setCallback(callback);
            }

            @Override
            public Deactivate setFields(java.lang.String fields) {
              return (Deactivate) super.setFields(fields);
            }

            @Override
            public Deactivate setKey(java.lang.String key) {
              return (Deactivate) super.setKey(key);
            }

            @Override
            public Deactivate setOauthToken(java.lang.String oauthToken) {
              return (Deactivate) super.setOauthToken(oauthToken);
            }

            @Override
            public Deactivate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Deactivate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Deactivate setQuotaUser(java.lang.String quotaUser) {
              return (Deactivate) super.setQuotaUser(quotaUser);
            }

            @Override
            public Deactivate setUploadType(java.lang.String uploadType) {
              return (Deactivate) super.setUploadType(uploadType);
            }

            @Override
            public Deactivate setUploadProtocol(java.lang.String uploadProtocol) {
              return (Deactivate) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to deactivate.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to deactivate. */
            public Deactivate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent one-time product (ID) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent one-time product (ID) of the offer to deactivate.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent one-time product (ID) of the offer to deactivate. */
            public Deactivate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent purchase option (ID) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) of the offer to deactivate.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /** Required. The parent purchase option (ID) of the offer to deactivate. */
            public Deactivate setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            /** Required. The offer ID of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The offer ID of the offer to deactivate.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The offer ID of the offer to deactivate. */
            public Deactivate setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Deactivate set(String parameterName, Object value) {
              return (Deactivate) super.set(parameterName, value);
            }
          }
          /**
           * Lists all offers under a given app, product, or purchase option.
           *
           * Create a request for the method "offers.list".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) for which the offers should be read.
           * @param productId Required. The parent one-time product (ID) for which the offers should be read. May be specified as
           *        '-' to read all offers under an app.
           * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be read. May be specified as
           *        '-' to read all offers under a one-time product or an app. Must be specified as '-' if
           *        product_id is specified as '-'.
           * @return the request
           */
          public List list(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId) throws java.io.IOException {
            List result = new List(packageName, productId, purchaseOptionId);
            initialize(result);
            return result;
          }

          public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListOneTimeProductOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers";

            /**
             * Lists all offers under a given app, product, or purchase option.
             *
             * Create a request for the method "offers.list".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
             * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) for which the offers should be read.
             * @param productId Required. The parent one-time product (ID) for which the offers should be read. May be specified as
           *        '-' to read all offers under an app.
             * @param purchaseOptionId Required. The parent purchase option (ID) for which the offers should be read. May be specified as
           *        '-' to read all offers under a one-time product or an app. Must be specified as '-' if
           *        product_id is specified as '-'.
             * @since 1.13
             */
            protected List(java.lang.String packageName, java.lang.String productId, java.lang.String purchaseOptionId) {
              super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListOneTimeProductOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.purchaseOptionId = com.google.api.client.util.Preconditions.checkNotNull(purchaseOptionId, "Required parameter purchaseOptionId must be specified.");
            }

            @Override
            public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
              return super.executeUsingHead();
            }

            @Override
            public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
              return super.buildHttpRequestUsingHead();
            }

            @Override
            public List set$Xgafv(java.lang.String $Xgafv) {
              return (List) super.set$Xgafv($Xgafv);
            }

            @Override
            public List setAccessToken(java.lang.String accessToken) {
              return (List) super.setAccessToken(accessToken);
            }

            @Override
            public List setAlt(java.lang.String alt) {
              return (List) super.setAlt(alt);
            }

            @Override
            public List setCallback(java.lang.String callback) {
              return (List) super.setCallback(callback);
            }

            @Override
            public List setFields(java.lang.String fields) {
              return (List) super.setFields(fields);
            }

            @Override
            public List setKey(java.lang.String key) {
              return (List) super.setKey(key);
            }

            @Override
            public List setOauthToken(java.lang.String oauthToken) {
              return (List) super.setOauthToken(oauthToken);
            }

            @Override
            public List setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (List) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public List setQuotaUser(java.lang.String quotaUser) {
              return (List) super.setQuotaUser(quotaUser);
            }

            @Override
            public List setUploadType(java.lang.String uploadType) {
              return (List) super.setUploadType(uploadType);
            }

            @Override
            public List setUploadProtocol(java.lang.String uploadProtocol) {
              return (List) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) for which the offers should be read. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) for which the offers should be read.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) for which the offers should be read. */
            public List setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The parent one-time product (ID) for which the offers should be read. May
             * be specified as '-' to read all offers under an app.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent one-time product (ID) for which the offers should be read. May be specified as
           '-' to read all offers under an app.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The parent one-time product (ID) for which the offers should be read. May
             * be specified as '-' to read all offers under an app.
             */
            public List setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under a one-time product or an app. Must be
             * specified as '-' if product_id is specified as '-'.
             */
            @com.google.api.client.util.Key
            private java.lang.String purchaseOptionId;

            /** Required. The parent purchase option (ID) for which the offers should be read. May be specified as
           '-' to read all offers under a one-time product or an app. Must be specified as '-' if product_id
           is specified as '-'.
             */
            public java.lang.String getPurchaseOptionId() {
              return purchaseOptionId;
            }

            /**
             * Required. The parent purchase option (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under a one-time product or an app. Must be
             * specified as '-' if product_id is specified as '-'.
             */
            public List setPurchaseOptionId(java.lang.String purchaseOptionId) {
              this.purchaseOptionId = purchaseOptionId;
              return this;
            }

            /**
             * Optional. The maximum number of offers to return. The service may return fewer than
             * this value. If unspecified, at most 50 offers will be returned. The maximum value is
             * 1000; values above 1000 will be coerced to 1000.
             */
            @com.google.api.client.util.Key
            private java.lang.Integer pageSize;

            /** Optional. The maximum number of offers to return. The service may return fewer than this value. If
           unspecified, at most 50 offers will be returned. The maximum value is 1000; values above 1000 will
           be coerced to 1000.
             */
            public java.lang.Integer getPageSize() {
              return pageSize;
            }

            /**
             * Optional. The maximum number of offers to return. The service may return fewer than
             * this value. If unspecified, at most 50 offers will be returned. The maximum value is
             * 1000; values above 1000 will be coerced to 1000.
             */
            public List setPageSize(java.lang.Integer pageSize) {
              this.pageSize = pageSize;
              return this;
            }

            /**
             * Optional. A page token, received from a previous `ListOneTimeProductsOffers` call.
             * Provide this to retrieve the subsequent page. When paginating, product_id,
             * package_name and purchase_option_id provided to `ListOneTimeProductsOffersRequest`
             * must match the call that provided the page token.
             */
            @com.google.api.client.util.Key
            private java.lang.String pageToken;

            /** Optional. A page token, received from a previous `ListOneTimeProductsOffers` call. Provide this to
           retrieve the subsequent page. When paginating, product_id, package_name and purchase_option_id
           provided to `ListOneTimeProductsOffersRequest` must match the call that provided the page token.
             */
            public java.lang.String getPageToken() {
              return pageToken;
            }

            /**
             * Optional. A page token, received from a previous `ListOneTimeProductsOffers` call.
             * Provide this to retrieve the subsequent page. When paginating, product_id,
             * package_name and purchase_option_id provided to `ListOneTimeProductsOffersRequest`
             * must match the call that provided the page token.
             */
            public List setPageToken(java.lang.String pageToken) {
              this.pageToken = pageToken;
              return this;
            }

            @Override
            public List set(String parameterName, Object value) {
              return (List) super.set(parameterName, value);
            }
          }

        }
      }
    }
    /**
     * An accessor for creating requests from the Subscriptions collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Subscriptions.List request = androidpublisher.subscriptions().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Subscriptions subscriptions() {
      return new Subscriptions();
    }

    /**
     * The "subscriptions" collection of methods.
     */
    public class Subscriptions {

      /**
       * Deprecated: subscription archiving is not supported.
       *
       * Create a request for the method "subscriptions.archive".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Archive#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) of the app of the subscription to delete.
       * @param productId Required. The unique product ID of the subscription to delete.
       * @param content the {@link com.google.api.services.androidpublisher.model.ArchiveSubscriptionRequest}
       * @return the request
       */
      public Archive archive(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.ArchiveSubscriptionRequest content) throws java.io.IOException {
        Archive result = new Archive(packageName, productId, content);
        initialize(result);
        return result;
      }

      public class Archive extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}:archive";

        /**
         * Deprecated: subscription archiving is not supported.
         *
         * Create a request for the method "subscriptions.archive".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Archive#execute()} method to invoke the remote operation.
         * <p> {@link
         * Archive#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) of the app of the subscription to delete.
         * @param productId Required. The unique product ID of the subscription to delete.
         * @param content the {@link com.google.api.services.androidpublisher.model.ArchiveSubscriptionRequest}
         * @since 1.13
         */
        protected Archive(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.ArchiveSubscriptionRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Subscription.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public Archive set$Xgafv(java.lang.String $Xgafv) {
          return (Archive) super.set$Xgafv($Xgafv);
        }

        @Override
        public Archive setAccessToken(java.lang.String accessToken) {
          return (Archive) super.setAccessToken(accessToken);
        }

        @Override
        public Archive setAlt(java.lang.String alt) {
          return (Archive) super.setAlt(alt);
        }

        @Override
        public Archive setCallback(java.lang.String callback) {
          return (Archive) super.setCallback(callback);
        }

        @Override
        public Archive setFields(java.lang.String fields) {
          return (Archive) super.setFields(fields);
        }

        @Override
        public Archive setKey(java.lang.String key) {
          return (Archive) super.setKey(key);
        }

        @Override
        public Archive setOauthToken(java.lang.String oauthToken) {
          return (Archive) super.setOauthToken(oauthToken);
        }

        @Override
        public Archive setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Archive) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Archive setQuotaUser(java.lang.String quotaUser) {
          return (Archive) super.setQuotaUser(quotaUser);
        }

        @Override
        public Archive setUploadType(java.lang.String uploadType) {
          return (Archive) super.setUploadType(uploadType);
        }

        @Override
        public Archive setUploadProtocol(java.lang.String uploadProtocol) {
          return (Archive) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) of the app of the subscription to delete. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) of the app of the subscription to delete.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) of the app of the subscription to delete. */
        public Archive setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. The unique product ID of the subscription to delete. */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The unique product ID of the subscription to delete.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** Required. The unique product ID of the subscription to delete. */
        public Archive setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        @Override
        public Archive set(String parameterName, Object value) {
          return (Archive) super.set(parameterName, value);
        }
      }
      /**
       * Reads one or more subscriptions.
       *
       * Create a request for the method "subscriptions.batchGet".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) for which the subscriptions should be retrieved. Must be
       *        equal to the package_name field on all the requests.
       * @return the request
       */
      public BatchGet batchGet(java.lang.String packageName) throws java.io.IOException {
        BatchGet result = new BatchGet(packageName);
        initialize(result);
        return result;
      }

      public class BatchGet extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchGetSubscriptionsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions:batchGet";

        /**
         * Reads one or more subscriptions.
         *
         * Create a request for the method "subscriptions.batchGet".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
         * <p> {@link
         * BatchGet#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the subscriptions should be retrieved. Must be
       *        equal to the package_name field on all the requests.
         * @since 1.13
         */
        protected BatchGet(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.BatchGetSubscriptionsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public BatchGet set$Xgafv(java.lang.String $Xgafv) {
          return (BatchGet) super.set$Xgafv($Xgafv);
        }

        @Override
        public BatchGet setAccessToken(java.lang.String accessToken) {
          return (BatchGet) super.setAccessToken(accessToken);
        }

        @Override
        public BatchGet setAlt(java.lang.String alt) {
          return (BatchGet) super.setAlt(alt);
        }

        @Override
        public BatchGet setCallback(java.lang.String callback) {
          return (BatchGet) super.setCallback(callback);
        }

        @Override
        public BatchGet setFields(java.lang.String fields) {
          return (BatchGet) super.setFields(fields);
        }

        @Override
        public BatchGet setKey(java.lang.String key) {
          return (BatchGet) super.setKey(key);
        }

        @Override
        public BatchGet setOauthToken(java.lang.String oauthToken) {
          return (BatchGet) super.setOauthToken(oauthToken);
        }

        @Override
        public BatchGet setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (BatchGet) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public BatchGet setQuotaUser(java.lang.String quotaUser) {
          return (BatchGet) super.setQuotaUser(quotaUser);
        }

        @Override
        public BatchGet setUploadType(java.lang.String uploadType) {
          return (BatchGet) super.setUploadType(uploadType);
        }

        @Override
        public BatchGet setUploadProtocol(java.lang.String uploadProtocol) {
          return (BatchGet) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the subscriptions should be retrieved.
         * Must be equal to the package_name field on all the requests.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the subscriptions should be retrieved. Must be
       equal to the package_name field on all the requests.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the subscriptions should be retrieved.
         * Must be equal to the package_name field on all the requests.
         */
        public BatchGet setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. A list of up to 100 subscription product IDs to retrieve. All the IDs must be
         * different.
         */
        @com.google.api.client.util.Key
        private java.util.List<java.lang.String> productIds;

        /** Required. A list of up to 100 subscription product IDs to retrieve. All the IDs must be different.
         */
        public java.util.List<java.lang.String> getProductIds() {
          return productIds;
        }

        /**
         * Required. A list of up to 100 subscription product IDs to retrieve. All the IDs must be
         * different.
         */
        public BatchGet setProductIds(java.util.List<java.lang.String> productIds) {
          this.productIds = productIds;
          return this;
        }

        @Override
        public BatchGet set(String parameterName, Object value) {
          return (BatchGet) super.set(parameterName, value);
        }
      }
      /**
       * Updates a batch of subscriptions. Set the latencyTolerance field on nested requests to
       * PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
       *
       * Create a request for the method "subscriptions.batchUpdate".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName Required. The parent app (package name) for which the subscriptions should be updated. Must be equal
       *        to the package_name field on all the Subscription resources.
       * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsRequest}
       * @return the request
       */
      public BatchUpdate batchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsRequest content) throws java.io.IOException {
        BatchUpdate result = new BatchUpdate(packageName, content);
        initialize(result);
        return result;
      }

      public class BatchUpdate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions:batchUpdate";

        /**
         * Updates a batch of subscriptions. Set the latencyTolerance field on nested requests to
         * PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
         *
         * Create a request for the method "subscriptions.batchUpdate".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
         * operation. <p> {@link
         * BatchUpdate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the subscriptions should be updated. Must be equal
       *        to the package_name field on all the Subscription resources.
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsRequest}
         * @since 1.13
         */
        protected BatchUpdate(java.lang.String packageName, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public BatchUpdate set$Xgafv(java.lang.String $Xgafv) {
          return (BatchUpdate) super.set$Xgafv($Xgafv);
        }

        @Override
        public BatchUpdate setAccessToken(java.lang.String accessToken) {
          return (BatchUpdate) super.setAccessToken(accessToken);
        }

        @Override
        public BatchUpdate setAlt(java.lang.String alt) {
          return (BatchUpdate) super.setAlt(alt);
        }

        @Override
        public BatchUpdate setCallback(java.lang.String callback) {
          return (BatchUpdate) super.setCallback(callback);
        }

        @Override
        public BatchUpdate setFields(java.lang.String fields) {
          return (BatchUpdate) super.setFields(fields);
        }

        @Override
        public BatchUpdate setKey(java.lang.String key) {
          return (BatchUpdate) super.setKey(key);
        }

        @Override
        public BatchUpdate setOauthToken(java.lang.String oauthToken) {
          return (BatchUpdate) super.setOauthToken(oauthToken);
        }

        @Override
        public BatchUpdate setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (BatchUpdate) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public BatchUpdate setQuotaUser(java.lang.String quotaUser) {
          return (BatchUpdate) super.setQuotaUser(quotaUser);
        }

        @Override
        public BatchUpdate setUploadType(java.lang.String uploadType) {
          return (BatchUpdate) super.setUploadType(uploadType);
        }

        @Override
        public BatchUpdate setUploadProtocol(java.lang.String uploadProtocol) {
          return (BatchUpdate) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the subscriptions should be updated.
         * Must be equal to the package_name field on all the Subscription resources.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the subscriptions should be updated. Must be
       equal to the package_name field on all the Subscription resources.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the subscriptions should be updated.
         * Must be equal to the package_name field on all the Subscription resources.
         */
        public BatchUpdate setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        @Override
        public BatchUpdate set(String parameterName, Object value) {
          return (BatchUpdate) super.set(parameterName, value);
        }
      }
      /**
       * Creates a new subscription. Newly added base plans will remain in draft state until activated.
       *
       * Create a request for the method "subscriptions.create".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) for which the subscription should be created. Must be equal
       *        to the package_name field on the Subscription resource.
       * @param content the {@link com.google.api.services.androidpublisher.model.Subscription}
       * @return the request
       */
      public Create create(java.lang.String packageName, com.google.api.services.androidpublisher.model.Subscription content) throws java.io.IOException {
        Create result = new Create(packageName, content);
        initialize(result);
        return result;
      }

      public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions";

        /**
         * Creates a new subscription. Newly added base plans will remain in draft state until activated.
         *
         * Create a request for the method "subscriptions.create".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the subscription should be created. Must be equal
       *        to the package_name field on the Subscription resource.
         * @param content the {@link com.google.api.services.androidpublisher.model.Subscription}
         * @since 1.13
         */
        protected Create(java.lang.String packageName, com.google.api.services.androidpublisher.model.Subscription content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Subscription.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

        @Override
        public Create setAlt(java.lang.String alt) {
          return (Create) super.setAlt(alt);
        }

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

        @Override
        public Create setFields(java.lang.String fields) {
          return (Create) super.setFields(fields);
        }

        @Override
        public Create setKey(java.lang.String key) {
          return (Create) super.setKey(key);
        }

        @Override
        public Create setOauthToken(java.lang.String oauthToken) {
          return (Create) super.setOauthToken(oauthToken);
        }

        @Override
        public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Create) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Create setQuotaUser(java.lang.String quotaUser) {
          return (Create) super.setQuotaUser(quotaUser);
        }

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The parent app (package name) for which the subscription should be created.
         * Must be equal to the package_name field on the Subscription resource.
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the subscription should be created. Must be equal
       to the package_name field on the Subscription resource.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The parent app (package name) for which the subscription should be created.
         * Must be equal to the package_name field on the Subscription resource.
         */
        public Create setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. The ID to use for the subscription. For the requirements on this format, see
         * the documentation of the product_id field on the Subscription resource.
         */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The ID to use for the subscription. For the requirements on this format, see the
       documentation of the product_id field on the Subscription resource.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /**
         * Required. The ID to use for the subscription. For the requirements on this format, see
         * the documentation of the product_id field on the Subscription resource.
         */
        public Create setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        @com.google.api.client.util.Key("regionsVersion.version")
        private java.lang.String regionsVersionVersion;

        /** Required. A string representing the version of available regions being used for the specified
       resource. Regional prices and latest supported version for the resource have to be specified
       according to the information published in [this
       article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the
       supported locations substantially change, the version will be incremented. Using this field will
       ensure that creating and updating the resource with an older region's version and set of regional
       prices and currencies will succeed even though a new version is available.
         */
        public java.lang.String getRegionsVersionVersion() {
          return regionsVersionVersion;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        public Create setRegionsVersionVersion(java.lang.String regionsVersionVersion) {
          this.regionsVersionVersion = regionsVersionVersion;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Deletes a subscription. A subscription can only be deleted if it has never had a base plan
       * published.
       *
       * Create a request for the method "subscriptions.delete".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) of the app of the subscription to delete.
       * @param productId Required. The unique product ID of the subscription to delete.
       * @return the request
       */
      public Delete delete(java.lang.String packageName, java.lang.String productId) throws java.io.IOException {
        Delete result = new Delete(packageName, productId);
        initialize(result);
        return result;
      }

      public class Delete extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}";

        /**
         * Deletes a subscription. A subscription can only be deleted if it has never had a base plan
         * published.
         *
         * Create a request for the method "subscriptions.delete".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) of the app of the subscription to delete.
         * @param productId Required. The unique product ID of the subscription to delete.
         * @since 1.13
         */
        protected Delete(java.lang.String packageName, java.lang.String productId) {
          super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

        @Override
        public Delete setAlt(java.lang.String alt) {
          return (Delete) super.setAlt(alt);
        }

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @Override
        public Delete setFields(java.lang.String fields) {
          return (Delete) super.setFields(fields);
        }

        @Override
        public Delete setKey(java.lang.String key) {
          return (Delete) super.setKey(key);
        }

        @Override
        public Delete setOauthToken(java.lang.String oauthToken) {
          return (Delete) super.setOauthToken(oauthToken);
        }

        @Override
        public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Delete) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Delete setQuotaUser(java.lang.String quotaUser) {
          return (Delete) super.setQuotaUser(quotaUser);
        }

        @Override
        public Delete setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) of the app of the subscription to delete. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) of the app of the subscription to delete.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) of the app of the subscription to delete. */
        public Delete setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. The unique product ID of the subscription to delete. */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The unique product ID of the subscription to delete.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** Required. The unique product ID of the subscription to delete. */
        public Delete setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        @Override
        public Delete set(String parameterName, Object value) {
          return (Delete) super.set(parameterName, value);
        }
      }
      /**
       * Reads a single subscription.
       *
       * Create a request for the method "subscriptions.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) of the subscription to get.
       * @param productId Required. The unique product ID of the subscription to get.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String productId) throws java.io.IOException {
        Get result = new Get(packageName, productId);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}";

        /**
         * Reads a single subscription.
         *
         * Create a request for the method "subscriptions.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) of the subscription to get.
         * @param productId Required. The unique product ID of the subscription to get.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String productId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Subscription.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) of the subscription to get. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) of the subscription to get.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) of the subscription to get. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** Required. The unique product ID of the subscription to get. */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Required. The unique product ID of the subscription to get.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** Required. The unique product ID of the subscription to get. */
        public Get setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists all subscriptions under a given app.
       *
       * Create a request for the method "subscriptions.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The parent app (package name) for which the subscriptions should be read.
       * @return the request
       */
      public List list(java.lang.String packageName) throws java.io.IOException {
        List result = new List(packageName);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListSubscriptionsResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions";

        /**
         * Lists all subscriptions under a given app.
         *
         * Create a request for the method "subscriptions.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The parent app (package name) for which the subscriptions should be read.
         * @since 1.13
         */
        protected List(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListSubscriptionsResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent app (package name) for which the subscriptions should be read. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The parent app (package name) for which the subscriptions should be read.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Required. The parent app (package name) for which the subscriptions should be read. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * The maximum number of subscriptions to return. The service may return fewer than this
         * value. If unspecified, at most 50 subscriptions will be returned. The maximum value is
         * 1000; values above 1000 will be coerced to 1000.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of subscriptions to return. The service may return fewer than this value. If
       unspecified, at most 50 subscriptions will be returned. The maximum value is 1000; values above
       1000 will be coerced to 1000.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /**
         * The maximum number of subscriptions to return. The service may return fewer than this
         * value. If unspecified, at most 50 subscriptions will be returned. The maximum value is
         * 1000; values above 1000 will be coerced to 1000.
         */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A page token, received from a previous `ListSubscriptions` call. Provide this to retrieve
         * the subsequent page. When paginating, all other parameters provided to
         * `ListSubscriptions` must match the call that provided the page token.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A page token, received from a previous `ListSubscriptions` call. Provide this to retrieve the
       subsequent page. When paginating, all other parameters provided to `ListSubscriptions` must match
       the call that provided the page token.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A page token, received from a previous `ListSubscriptions` call. Provide this to retrieve
         * the subsequent page. When paginating, all other parameters provided to
         * `ListSubscriptions` must match the call that provided the page token.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        /** Deprecated: subscription archiving is not supported. */
        @com.google.api.client.util.Key
        private java.lang.Boolean showArchived;

        /** Deprecated: subscription archiving is not supported.
         */
        public java.lang.Boolean getShowArchived() {
          return showArchived;
        }

        /** Deprecated: subscription archiving is not supported. */
        public List setShowArchived(java.lang.Boolean showArchived) {
          this.showArchived = showArchived;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Updates an existing subscription.
       *
       * Create a request for the method "subscriptions.patch".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param packageName Immutable. Package name of the parent app.
       * @param productId Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must be
       *        composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots (.). It must
       *        start with a lower-case letter or number, and be between 1 and 40 (inclusive) characters
       *        in length.
       * @param content the {@link com.google.api.services.androidpublisher.model.Subscription}
       * @return the request
       */
      public Patch patch(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.Subscription content) throws java.io.IOException {
        Patch result = new Patch(packageName, productId, content);
        initialize(result);
        return result;
      }

      public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}";

        /**
         * Updates an existing subscription.
         *
         * Create a request for the method "subscriptions.patch".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Immutable. Package name of the parent app.
         * @param productId Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must be
       *        composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots (.). It must
       *        start with a lower-case letter or number, and be between 1 and 40 (inclusive) characters
       *        in length.
         * @param content the {@link com.google.api.services.androidpublisher.model.Subscription}
         * @since 1.13
         */
        protected Patch(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.Subscription content) {
          super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.Subscription.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

        @Override
        public Patch setAlt(java.lang.String alt) {
          return (Patch) super.setAlt(alt);
        }

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

        @Override
        public Patch setFields(java.lang.String fields) {
          return (Patch) super.setFields(fields);
        }

        @Override
        public Patch setKey(java.lang.String key) {
          return (Patch) super.setKey(key);
        }

        @Override
        public Patch setOauthToken(java.lang.String oauthToken) {
          return (Patch) super.setOauthToken(oauthToken);
        }

        @Override
        public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Patch) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Patch setQuotaUser(java.lang.String quotaUser) {
          return (Patch) super.setQuotaUser(quotaUser);
        }

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Immutable. Package name of the parent app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Immutable. Package name of the parent app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Immutable. Package name of the parent app. */
        public Patch setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Immutable. Unique product ID of the product. Unique within the parent app. Product IDs
         * must be composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots
         * (.). It must start with a lower-case letter or number, and be between 1 and 40
         * (inclusive) characters in length.
         */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must be
       composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots (.). It must start
       with a lower-case letter or number, and be between 1 and 40 (inclusive) characters in length.
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /**
         * Immutable. Unique product ID of the product. Unique within the parent app. Product IDs
         * must be composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots
         * (.). It must start with a lower-case letter or number, and be between 1 and 40
         * (inclusive) characters in length.
         */
        public Patch setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /**
         * Optional. If set to true, and the subscription with the given package_name and product_id
         * doesn't exist, the subscription will be created. If a new subscription is created,
         * update_mask is ignored.
         */
        @com.google.api.client.util.Key
        private java.lang.Boolean allowMissing;

        /** Optional. If set to true, and the subscription with the given package_name and product_id doesn't
       exist, the subscription will be created. If a new subscription is created, update_mask is ignored.
         */
        public java.lang.Boolean getAllowMissing() {
          return allowMissing;
        }

        /**
         * Optional. If set to true, and the subscription with the given package_name and product_id
         * doesn't exist, the subscription will be created. If a new subscription is created,
         * update_mask is ignored.
         */
        public Patch setAllowMissing(java.lang.Boolean allowMissing) {
          this.allowMissing = allowMissing;
          return this;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product update. Defaults to
         * latency-sensitive.
         */
        @com.google.api.client.util.Key
        private java.lang.String latencyTolerance;

        /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
       sensitive.
         */
        public java.lang.String getLatencyTolerance() {
          return latencyTolerance;
        }

        /**
         * Optional. The latency tolerance for the propagation of this product update. Defaults to
         * latency-sensitive.
         */
        public Patch setLatencyTolerance(java.lang.String latencyTolerance) {
          this.latencyTolerance = latencyTolerance;
          return this;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        @com.google.api.client.util.Key("regionsVersion.version")
        private java.lang.String regionsVersionVersion;

        /** Required. A string representing the version of available regions being used for the specified
       resource. Regional prices and latest supported version for the resource have to be specified
       according to the information published in [this
       article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the
       supported locations substantially change, the version will be incremented. Using this field will
       ensure that creating and updating the resource with an older region's version and set of regional
       prices and currencies will succeed even though a new version is available.
         */
        public java.lang.String getRegionsVersionVersion() {
          return regionsVersionVersion;
        }

        /**
         * Required. A string representing the version of available regions being used for the
         * specified resource. Regional prices and latest supported version for the resource have to
         * be specified according to the information published in [this
         * article](https://support.google.com/googleplay/android-developer/answer/10532353). Each
         * time the supported locations substantially change, the version will be incremented. Using
         * this field will ensure that creating and updating the resource with an older region's
         * version and set of regional prices and currencies will succeed even though a new version
         * is available.
         */
        public Patch setRegionsVersionVersion(java.lang.String regionsVersionVersion) {
          this.regionsVersionVersion = regionsVersionVersion;
          return this;
        }

        /** Required. The list of fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Required. The list of fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Required. The list of fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }

      /**
       * An accessor for creating requests from the BasePlans collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
       *   {@code AndroidPublisher.BasePlans.List request = androidpublisher.basePlans().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public BasePlans basePlans() {
        return new BasePlans();
      }

      /**
       * The "basePlans" collection of methods.
       */
      public class BasePlans {

        /**
         * Activates a base plan. Once activated, base plans will be available to new subscribers.
         *
         * Create a request for the method "basePlans.activate".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
         *
         * @param packageName Required. The parent app (package name) of the base plan to activate.
         * @param productId Required. The parent subscription (ID) of the base plan to activate.
         * @param basePlanId Required. The unique base plan ID of the base plan to activate.
         * @param content the {@link com.google.api.services.androidpublisher.model.ActivateBasePlanRequest}
         * @return the request
         */
        public Activate activate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.ActivateBasePlanRequest content) throws java.io.IOException {
          Activate result = new Activate(packageName, productId, basePlanId, content);
          initialize(result);
          return result;
        }

        public class Activate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:activate";

          /**
           * Activates a base plan. Once activated, base plans will be available to new subscribers.
           *
           * Create a request for the method "basePlans.activate".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
           * <p> {@link
           * Activate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the base plan to activate.
           * @param productId Required. The parent subscription (ID) of the base plan to activate.
           * @param basePlanId Required. The unique base plan ID of the base plan to activate.
           * @param content the {@link com.google.api.services.androidpublisher.model.ActivateBasePlanRequest}
           * @since 1.13
           */
          protected Activate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.ActivateBasePlanRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Subscription.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
            this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
          }

          @Override
          public Activate set$Xgafv(java.lang.String $Xgafv) {
            return (Activate) super.set$Xgafv($Xgafv);
          }

          @Override
          public Activate setAccessToken(java.lang.String accessToken) {
            return (Activate) super.setAccessToken(accessToken);
          }

          @Override
          public Activate setAlt(java.lang.String alt) {
            return (Activate) super.setAlt(alt);
          }

          @Override
          public Activate setCallback(java.lang.String callback) {
            return (Activate) super.setCallback(callback);
          }

          @Override
          public Activate setFields(java.lang.String fields) {
            return (Activate) super.setFields(fields);
          }

          @Override
          public Activate setKey(java.lang.String key) {
            return (Activate) super.setKey(key);
          }

          @Override
          public Activate setOauthToken(java.lang.String oauthToken) {
            return (Activate) super.setOauthToken(oauthToken);
          }

          @Override
          public Activate setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (Activate) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public Activate setQuotaUser(java.lang.String quotaUser) {
            return (Activate) super.setQuotaUser(quotaUser);
          }

          @Override
          public Activate setUploadType(java.lang.String uploadType) {
            return (Activate) super.setUploadType(uploadType);
          }

          @Override
          public Activate setUploadProtocol(java.lang.String uploadProtocol) {
            return (Activate) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the base plan to activate. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the base plan to activate.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the base plan to activate. */
          public Activate setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /** Required. The parent subscription (ID) of the base plan to activate. */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The parent subscription (ID) of the base plan to activate.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /** Required. The parent subscription (ID) of the base plan to activate. */
          public Activate setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          /** Required. The unique base plan ID of the base plan to activate. */
          @com.google.api.client.util.Key
          private java.lang.String basePlanId;

          /** Required. The unique base plan ID of the base plan to activate.
           */
          public java.lang.String getBasePlanId() {
            return basePlanId;
          }

          /** Required. The unique base plan ID of the base plan to activate. */
          public Activate setBasePlanId(java.lang.String basePlanId) {
            this.basePlanId = basePlanId;
            return this;
          }

          @Override
          public Activate set(String parameterName, Object value) {
            return (Activate) super.set(parameterName, value);
          }
        }
        /**
         * Batch variant of the MigrateBasePlanPrices endpoint. Set the latencyTolerance field on nested
         * requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update
         * throughput.
         *
         * Create a request for the method "basePlans.batchMigratePrices".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchMigratePrices#execute()} method to invoke the remote
         * operation.
         *
         * @param packageName Required. The parent app (package name) for which the subscriptions should be created or updated.
         *        Must be equal to the package_name field on all the Subscription resources.
         * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
         *        subscription. If this batch update spans multiple subscriptions, set this field to "-".
         *        Must be set.
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesRequest}
         * @return the request
         */
        public BatchMigratePrices batchMigratePrices(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesRequest content) throws java.io.IOException {
          BatchMigratePrices result = new BatchMigratePrices(packageName, productId, content);
          initialize(result);
          return result;
        }

        public class BatchMigratePrices extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesResponse> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchMigratePrices";

          /**
           * Batch variant of the MigrateBasePlanPrices endpoint. Set the latencyTolerance field on nested
           * requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update
           * throughput.
           *
           * Create a request for the method "basePlans.batchMigratePrices".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchMigratePrices#execute()} method to invoke the remote
           * operation. <p> {@link BatchMigratePrices#initialize(com.google.api.client.googleapis.services.A
           * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
           * invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) for which the subscriptions should be created or updated.
         *        Must be equal to the package_name field on all the Subscription resources.
           * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
         *        subscription. If this batch update spans multiple subscriptions, set this field to "-".
         *        Must be set.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesRequest}
           * @since 1.13
           */
          protected BatchMigratePrices(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchMigrateBasePlanPricesResponse.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          }

          @Override
          public BatchMigratePrices set$Xgafv(java.lang.String $Xgafv) {
            return (BatchMigratePrices) super.set$Xgafv($Xgafv);
          }

          @Override
          public BatchMigratePrices setAccessToken(java.lang.String accessToken) {
            return (BatchMigratePrices) super.setAccessToken(accessToken);
          }

          @Override
          public BatchMigratePrices setAlt(java.lang.String alt) {
            return (BatchMigratePrices) super.setAlt(alt);
          }

          @Override
          public BatchMigratePrices setCallback(java.lang.String callback) {
            return (BatchMigratePrices) super.setCallback(callback);
          }

          @Override
          public BatchMigratePrices setFields(java.lang.String fields) {
            return (BatchMigratePrices) super.setFields(fields);
          }

          @Override
          public BatchMigratePrices setKey(java.lang.String key) {
            return (BatchMigratePrices) super.setKey(key);
          }

          @Override
          public BatchMigratePrices setOauthToken(java.lang.String oauthToken) {
            return (BatchMigratePrices) super.setOauthToken(oauthToken);
          }

          @Override
          public BatchMigratePrices setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (BatchMigratePrices) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public BatchMigratePrices setQuotaUser(java.lang.String quotaUser) {
            return (BatchMigratePrices) super.setQuotaUser(quotaUser);
          }

          @Override
          public BatchMigratePrices setUploadType(java.lang.String uploadType) {
            return (BatchMigratePrices) super.setUploadType(uploadType);
          }

          @Override
          public BatchMigratePrices setUploadProtocol(java.lang.String uploadProtocol) {
            return (BatchMigratePrices) super.setUploadProtocol(uploadProtocol);
          }

          /**
           * Required. The parent app (package name) for which the subscriptions should be created
           * or updated. Must be equal to the package_name field on all the Subscription resources.
           */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) for which the subscriptions should be created or updated.
         Must be equal to the package_name field on all the Subscription resources.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /**
           * Required. The parent app (package name) for which the subscriptions should be created
           * or updated. Must be equal to the package_name field on all the Subscription resources.
           */
          public BatchMigratePrices setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /**
           * Required. The product ID of the parent subscription, if all updated offers belong to
           * the same subscription. If this batch update spans multiple subscriptions, set this
           * field to "-". Must be set.
           */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The product ID of the parent subscription, if all updated offers belong to the same
         subscription. If this batch update spans multiple subscriptions, set this field to "-". Must be
         set.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /**
           * Required. The product ID of the parent subscription, if all updated offers belong to
           * the same subscription. If this batch update spans multiple subscriptions, set this
           * field to "-". Must be set.
           */
          public BatchMigratePrices setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          @Override
          public BatchMigratePrices set(String parameterName, Object value) {
            return (BatchMigratePrices) super.set(parameterName, value);
          }
        }
        /**
         * Activates or deactivates base plans across one or multiple subscriptions. Set the
         * latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to
         * achieve maximum update throughput.
         *
         * Create a request for the method "basePlans.batchUpdateStates".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
         * operation.
         *
         * @param packageName Required. The parent app (package name) of the updated base plans.
         * @param productId Required. The product ID of the parent subscription, if all updated base plans belong to the same
         *        subscription. If this batch update spans multiple subscriptions, set this field to "-".
         *        Must be set.
         * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesRequest}
         * @return the request
         */
        public BatchUpdateStates batchUpdateStates(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesRequest content) throws java.io.IOException {
          BatchUpdateStates result = new BatchUpdateStates(packageName, productId, content);
          initialize(result);
          return result;
        }

        public class BatchUpdateStates extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesResponse> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchUpdateStates";

          /**
           * Activates or deactivates base plans across one or multiple subscriptions. Set the
           * latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
           * to achieve maximum update throughput.
           *
           * Create a request for the method "basePlans.batchUpdateStates".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
           * operation. <p> {@link BatchUpdateStates#initialize(com.google.api.client.googleapis.services.Ab
           * stractGoogleClientRequest)} must be called to initialize this instance immediately after
           * invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the updated base plans.
           * @param productId Required. The product ID of the parent subscription, if all updated base plans belong to the same
         *        subscription. If this batch update spans multiple subscriptions, set this field to "-".
         *        Must be set.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesRequest}
           * @since 1.13
           */
          protected BatchUpdateStates(java.lang.String packageName, java.lang.String productId, com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateBasePlanStatesResponse.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          }

          @Override
          public BatchUpdateStates set$Xgafv(java.lang.String $Xgafv) {
            return (BatchUpdateStates) super.set$Xgafv($Xgafv);
          }

          @Override
          public BatchUpdateStates setAccessToken(java.lang.String accessToken) {
            return (BatchUpdateStates) super.setAccessToken(accessToken);
          }

          @Override
          public BatchUpdateStates setAlt(java.lang.String alt) {
            return (BatchUpdateStates) super.setAlt(alt);
          }

          @Override
          public BatchUpdateStates setCallback(java.lang.String callback) {
            return (BatchUpdateStates) super.setCallback(callback);
          }

          @Override
          public BatchUpdateStates setFields(java.lang.String fields) {
            return (BatchUpdateStates) super.setFields(fields);
          }

          @Override
          public BatchUpdateStates setKey(java.lang.String key) {
            return (BatchUpdateStates) super.setKey(key);
          }

          @Override
          public BatchUpdateStates setOauthToken(java.lang.String oauthToken) {
            return (BatchUpdateStates) super.setOauthToken(oauthToken);
          }

          @Override
          public BatchUpdateStates setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (BatchUpdateStates) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public BatchUpdateStates setQuotaUser(java.lang.String quotaUser) {
            return (BatchUpdateStates) super.setQuotaUser(quotaUser);
          }

          @Override
          public BatchUpdateStates setUploadType(java.lang.String uploadType) {
            return (BatchUpdateStates) super.setUploadType(uploadType);
          }

          @Override
          public BatchUpdateStates setUploadProtocol(java.lang.String uploadProtocol) {
            return (BatchUpdateStates) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the updated base plans. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the updated base plans.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the updated base plans. */
          public BatchUpdateStates setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /**
           * Required. The product ID of the parent subscription, if all updated base plans belong
           * to the same subscription. If this batch update spans multiple subscriptions, set this
           * field to "-". Must be set.
           */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The product ID of the parent subscription, if all updated base plans belong to the same
         subscription. If this batch update spans multiple subscriptions, set this field to "-". Must be
         set.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /**
           * Required. The product ID of the parent subscription, if all updated base plans belong
           * to the same subscription. If this batch update spans multiple subscriptions, set this
           * field to "-". Must be set.
           */
          public BatchUpdateStates setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          @Override
          public BatchUpdateStates set(String parameterName, Object value) {
            return (BatchUpdateStates) super.set(parameterName, value);
          }
        }
        /**
         * Deactivates a base plan. Once deactivated, the base plan will become unavailable to new
         * subscribers, but existing subscribers will maintain their subscription
         *
         * Create a request for the method "basePlans.deactivate".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote operation.
         *
         * @param packageName Required. The parent app (package name) of the base plan to deactivate.
         * @param productId Required. The parent subscription (ID) of the base plan to deactivate.
         * @param basePlanId Required. The unique base plan ID of the base plan to deactivate.
         * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateBasePlanRequest}
         * @return the request
         */
        public Deactivate deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.DeactivateBasePlanRequest content) throws java.io.IOException {
          Deactivate result = new Deactivate(packageName, productId, basePlanId, content);
          initialize(result);
          return result;
        }

        public class Deactivate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Subscription> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:deactivate";

          /**
           * Deactivates a base plan. Once deactivated, the base plan will become unavailable to new
           * subscribers, but existing subscribers will maintain their subscription
           *
           * Create a request for the method "basePlans.deactivate".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote
           * operation. <p> {@link
           * Deactivate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the base plan to deactivate.
           * @param productId Required. The parent subscription (ID) of the base plan to deactivate.
           * @param basePlanId Required. The unique base plan ID of the base plan to deactivate.
           * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateBasePlanRequest}
           * @since 1.13
           */
          protected Deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.DeactivateBasePlanRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Subscription.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
            this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
          }

          @Override
          public Deactivate set$Xgafv(java.lang.String $Xgafv) {
            return (Deactivate) super.set$Xgafv($Xgafv);
          }

          @Override
          public Deactivate setAccessToken(java.lang.String accessToken) {
            return (Deactivate) super.setAccessToken(accessToken);
          }

          @Override
          public Deactivate setAlt(java.lang.String alt) {
            return (Deactivate) super.setAlt(alt);
          }

          @Override
          public Deactivate setCallback(java.lang.String callback) {
            return (Deactivate) super.setCallback(callback);
          }

          @Override
          public Deactivate setFields(java.lang.String fields) {
            return (Deactivate) super.setFields(fields);
          }

          @Override
          public Deactivate setKey(java.lang.String key) {
            return (Deactivate) super.setKey(key);
          }

          @Override
          public Deactivate setOauthToken(java.lang.String oauthToken) {
            return (Deactivate) super.setOauthToken(oauthToken);
          }

          @Override
          public Deactivate setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (Deactivate) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public Deactivate setQuotaUser(java.lang.String quotaUser) {
            return (Deactivate) super.setQuotaUser(quotaUser);
          }

          @Override
          public Deactivate setUploadType(java.lang.String uploadType) {
            return (Deactivate) super.setUploadType(uploadType);
          }

          @Override
          public Deactivate setUploadProtocol(java.lang.String uploadProtocol) {
            return (Deactivate) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the base plan to deactivate. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the base plan to deactivate.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the base plan to deactivate. */
          public Deactivate setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /** Required. The parent subscription (ID) of the base plan to deactivate. */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The parent subscription (ID) of the base plan to deactivate.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /** Required. The parent subscription (ID) of the base plan to deactivate. */
          public Deactivate setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          /** Required. The unique base plan ID of the base plan to deactivate. */
          @com.google.api.client.util.Key
          private java.lang.String basePlanId;

          /** Required. The unique base plan ID of the base plan to deactivate.
           */
          public java.lang.String getBasePlanId() {
            return basePlanId;
          }

          /** Required. The unique base plan ID of the base plan to deactivate. */
          public Deactivate setBasePlanId(java.lang.String basePlanId) {
            this.basePlanId = basePlanId;
            return this;
          }

          @Override
          public Deactivate set(String parameterName, Object value) {
            return (Deactivate) super.set(parameterName, value);
          }
        }
        /**
         * Deletes a base plan. Can only be done for draft base plans. This action is irreversible.
         *
         * Create a request for the method "basePlans.delete".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         *
         * @param packageName Required. The parent app (package name) of the base plan to delete.
         * @param productId Required. The parent subscription (ID) of the base plan to delete.
         * @param basePlanId Required. The unique offer ID of the base plan to delete.
         * @return the request
         */
        public Delete delete(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId) throws java.io.IOException {
          Delete result = new Delete(packageName, productId, basePlanId);
          initialize(result);
          return result;
        }

        public class Delete extends AndroidPublisherRequest<Void> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}";

          /**
           * Deletes a base plan. Can only be done for draft base plans. This action is irreversible.
           *
           * Create a request for the method "basePlans.delete".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
           * <p> {@link
           * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param packageName Required. The parent app (package name) of the base plan to delete.
           * @param productId Required. The parent subscription (ID) of the base plan to delete.
           * @param basePlanId Required. The unique offer ID of the base plan to delete.
           * @since 1.13
           */
          protected Delete(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId) {
            super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
            this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
          }

          @Override
          public Delete set$Xgafv(java.lang.String $Xgafv) {
            return (Delete) super.set$Xgafv($Xgafv);
          }

          @Override
          public Delete setAccessToken(java.lang.String accessToken) {
            return (Delete) super.setAccessToken(accessToken);
          }

          @Override
          public Delete setAlt(java.lang.String alt) {
            return (Delete) super.setAlt(alt);
          }

          @Override
          public Delete setCallback(java.lang.String callback) {
            return (Delete) super.setCallback(callback);
          }

          @Override
          public Delete setFields(java.lang.String fields) {
            return (Delete) super.setFields(fields);
          }

          @Override
          public Delete setKey(java.lang.String key) {
            return (Delete) super.setKey(key);
          }

          @Override
          public Delete setOauthToken(java.lang.String oauthToken) {
            return (Delete) super.setOauthToken(oauthToken);
          }

          @Override
          public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (Delete) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public Delete setQuotaUser(java.lang.String quotaUser) {
            return (Delete) super.setQuotaUser(quotaUser);
          }

          @Override
          public Delete setUploadType(java.lang.String uploadType) {
            return (Delete) super.setUploadType(uploadType);
          }

          @Override
          public Delete setUploadProtocol(java.lang.String uploadProtocol) {
            return (Delete) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent app (package name) of the base plan to delete. */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. The parent app (package name) of the base plan to delete.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /** Required. The parent app (package name) of the base plan to delete. */
          public Delete setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /** Required. The parent subscription (ID) of the base plan to delete. */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The parent subscription (ID) of the base plan to delete.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /** Required. The parent subscription (ID) of the base plan to delete. */
          public Delete setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          /** Required. The unique offer ID of the base plan to delete. */
          @com.google.api.client.util.Key
          private java.lang.String basePlanId;

          /** Required. The unique offer ID of the base plan to delete.
           */
          public java.lang.String getBasePlanId() {
            return basePlanId;
          }

          /** Required. The unique offer ID of the base plan to delete. */
          public Delete setBasePlanId(java.lang.String basePlanId) {
            this.basePlanId = basePlanId;
            return this;
          }

          @Override
          public Delete set(String parameterName, Object value) {
            return (Delete) super.set(parameterName, value);
          }
        }
        /**
         * Migrates subscribers from one or more legacy price cohorts to the current price. Requests result
         * in Google Play notifying affected subscribers. Only up to 250 simultaneous legacy price cohorts
         * are supported.
         *
         * Create a request for the method "basePlans.migratePrices".
         *
         * This request holds the parameters needed by the androidpublisher server.  After setting any
         * optional parameters, call the {@link MigratePrices#execute()} method to invoke the remote
         * operation.
         *
         * @param packageName Required. Package name of the parent app. Must be equal to the package_name field on the
         *        Subscription resource.
         * @param productId Required. The ID of the subscription to update. Must be equal to the product_id field on the
         *        Subscription resource.
         * @param basePlanId Required. The unique base plan ID of the base plan to update prices on.
         * @param content the {@link com.google.api.services.androidpublisher.model.MigrateBasePlanPricesRequest}
         * @return the request
         */
        public MigratePrices migratePrices(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.MigrateBasePlanPricesRequest content) throws java.io.IOException {
          MigratePrices result = new MigratePrices(packageName, productId, basePlanId, content);
          initialize(result);
          return result;
        }

        public class MigratePrices extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.MigrateBasePlanPricesResponse> {

          private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:migratePrices";

          /**
           * Migrates subscribers from one or more legacy price cohorts to the current price. Requests
           * result in Google Play notifying affected subscribers. Only up to 250 simultaneous legacy price
           * cohorts are supported.
           *
           * Create a request for the method "basePlans.migratePrices".
           *
           * This request holds the parameters needed by the the androidpublisher server.  After setting any
           * optional parameters, call the {@link MigratePrices#execute()} method to invoke the remote
           * operation. <p> {@link MigratePrices#initialize(com.google.api.client.googleapis.services.Abstra
           * ctGoogleClientRequest)} must be called to initialize this instance immediately after invoking
           * the constructor. </p>
           *
           * @param packageName Required. Package name of the parent app. Must be equal to the package_name field on the
         *        Subscription resource.
           * @param productId Required. The ID of the subscription to update. Must be equal to the product_id field on the
         *        Subscription resource.
           * @param basePlanId Required. The unique base plan ID of the base plan to update prices on.
           * @param content the {@link com.google.api.services.androidpublisher.model.MigrateBasePlanPricesRequest}
           * @since 1.13
           */
          protected MigratePrices(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.MigrateBasePlanPricesRequest content) {
            super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.MigrateBasePlanPricesResponse.class);
            this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
            this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
            this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
          }

          @Override
          public MigratePrices set$Xgafv(java.lang.String $Xgafv) {
            return (MigratePrices) super.set$Xgafv($Xgafv);
          }

          @Override
          public MigratePrices setAccessToken(java.lang.String accessToken) {
            return (MigratePrices) super.setAccessToken(accessToken);
          }

          @Override
          public MigratePrices setAlt(java.lang.String alt) {
            return (MigratePrices) super.setAlt(alt);
          }

          @Override
          public MigratePrices setCallback(java.lang.String callback) {
            return (MigratePrices) super.setCallback(callback);
          }

          @Override
          public MigratePrices setFields(java.lang.String fields) {
            return (MigratePrices) super.setFields(fields);
          }

          @Override
          public MigratePrices setKey(java.lang.String key) {
            return (MigratePrices) super.setKey(key);
          }

          @Override
          public MigratePrices setOauthToken(java.lang.String oauthToken) {
            return (MigratePrices) super.setOauthToken(oauthToken);
          }

          @Override
          public MigratePrices setPrettyPrint(java.lang.Boolean prettyPrint) {
            return (MigratePrices) super.setPrettyPrint(prettyPrint);
          }

          @Override
          public MigratePrices setQuotaUser(java.lang.String quotaUser) {
            return (MigratePrices) super.setQuotaUser(quotaUser);
          }

          @Override
          public MigratePrices setUploadType(java.lang.String uploadType) {
            return (MigratePrices) super.setUploadType(uploadType);
          }

          @Override
          public MigratePrices setUploadProtocol(java.lang.String uploadProtocol) {
            return (MigratePrices) super.setUploadProtocol(uploadProtocol);
          }

          /**
           * Required. Package name of the parent app. Must be equal to the package_name field on
           * the Subscription resource.
           */
          @com.google.api.client.util.Key
          private java.lang.String packageName;

          /** Required. Package name of the parent app. Must be equal to the package_name field on the
         Subscription resource.
           */
          public java.lang.String getPackageName() {
            return packageName;
          }

          /**
           * Required. Package name of the parent app. Must be equal to the package_name field on
           * the Subscription resource.
           */
          public MigratePrices setPackageName(java.lang.String packageName) {
            this.packageName = packageName;
            return this;
          }

          /**
           * Required. The ID of the subscription to update. Must be equal to the product_id field
           * on the Subscription resource.
           */
          @com.google.api.client.util.Key
          private java.lang.String productId;

          /** Required. The ID of the subscription to update. Must be equal to the product_id field on the
         Subscription resource.
           */
          public java.lang.String getProductId() {
            return productId;
          }

          /**
           * Required. The ID of the subscription to update. Must be equal to the product_id field
           * on the Subscription resource.
           */
          public MigratePrices setProductId(java.lang.String productId) {
            this.productId = productId;
            return this;
          }

          /** Required. The unique base plan ID of the base plan to update prices on. */
          @com.google.api.client.util.Key
          private java.lang.String basePlanId;

          /** Required. The unique base plan ID of the base plan to update prices on.
           */
          public java.lang.String getBasePlanId() {
            return basePlanId;
          }

          /** Required. The unique base plan ID of the base plan to update prices on. */
          public MigratePrices setBasePlanId(java.lang.String basePlanId) {
            this.basePlanId = basePlanId;
            return this;
          }

          @Override
          public MigratePrices set(String parameterName, Object value) {
            return (MigratePrices) super.set(parameterName, value);
          }
        }

        /**
         * An accessor for creating requests from the Offers collection.
         *
         * <p>The typical use is:</p>
         * <pre>
         *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
         *   {@code AndroidPublisher.Offers.List request = androidpublisher.offers().list(parameters ...)}
         * </pre>
         *
         * @return the resource collection
         */
        public Offers offers() {
          return new Offers();
        }

        /**
         * The "offers" collection of methods.
         */
        public class Offers {

          /**
           * Activates a subscription offer. Once activated, subscription offers will be available to new
           * subscribers.
           *
           * Create a request for the method "offers.activate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to activate.
           * @param productId Required. The parent subscription (ID) of the offer to activate.
           * @param basePlanId Required. The parent base plan (ID) of the offer to activate.
           * @param offerId Required. The unique offer ID of the offer to activate.
           * @param content the {@link com.google.api.services.androidpublisher.model.ActivateSubscriptionOfferRequest}
           * @return the request
           */
          public Activate activate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.ActivateSubscriptionOfferRequest content) throws java.io.IOException {
            Activate result = new Activate(packageName, productId, basePlanId, offerId, content);
            initialize(result);
            return result;
          }

          public class Activate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:activate";

            /**
             * Activates a subscription offer. Once activated, subscription offers will be available to new
             * subscribers.
             *
             * Create a request for the method "offers.activate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Activate#execute()} method to invoke the remote operation.
             * <p> {@link
             * Activate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to activate.
             * @param productId Required. The parent subscription (ID) of the offer to activate.
             * @param basePlanId Required. The parent base plan (ID) of the offer to activate.
             * @param offerId Required. The unique offer ID of the offer to activate.
             * @param content the {@link com.google.api.services.androidpublisher.model.ActivateSubscriptionOfferRequest}
             * @since 1.13
             */
            protected Activate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.ActivateSubscriptionOfferRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.SubscriptionOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Activate set$Xgafv(java.lang.String $Xgafv) {
              return (Activate) super.set$Xgafv($Xgafv);
            }

            @Override
            public Activate setAccessToken(java.lang.String accessToken) {
              return (Activate) super.setAccessToken(accessToken);
            }

            @Override
            public Activate setAlt(java.lang.String alt) {
              return (Activate) super.setAlt(alt);
            }

            @Override
            public Activate setCallback(java.lang.String callback) {
              return (Activate) super.setCallback(callback);
            }

            @Override
            public Activate setFields(java.lang.String fields) {
              return (Activate) super.setFields(fields);
            }

            @Override
            public Activate setKey(java.lang.String key) {
              return (Activate) super.setKey(key);
            }

            @Override
            public Activate setOauthToken(java.lang.String oauthToken) {
              return (Activate) super.setOauthToken(oauthToken);
            }

            @Override
            public Activate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Activate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Activate setQuotaUser(java.lang.String quotaUser) {
              return (Activate) super.setQuotaUser(quotaUser);
            }

            @Override
            public Activate setUploadType(java.lang.String uploadType) {
              return (Activate) super.setUploadType(uploadType);
            }

            @Override
            public Activate setUploadProtocol(java.lang.String uploadProtocol) {
              return (Activate) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to activate.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to activate. */
            public Activate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent subscription (ID) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) of the offer to activate.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent subscription (ID) of the offer to activate. */
            public Activate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent base plan (ID) of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) of the offer to activate.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /** Required. The parent base plan (ID) of the offer to activate. */
            public Activate setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /** Required. The unique offer ID of the offer to activate. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The unique offer ID of the offer to activate.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The unique offer ID of the offer to activate. */
            public Activate setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Activate set(String parameterName, Object value) {
              return (Activate) super.set(parameterName, value);
            }
          }
          /**
           * Reads one or more subscription offers.
           *
           * Create a request for the method "offers.batchGet".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) for which the subscriptions should be created or updated.
           *        Must be equal to the package_name field on all the requests.
           * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
           * @param basePlanId Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           *        read offers from multiple base plans.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersRequest}
           * @return the request
           */
          public BatchGet batchGet(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersRequest content) throws java.io.IOException {
            BatchGet result = new BatchGet(packageName, productId, basePlanId, content);
            initialize(result);
            return result;
          }

          public class BatchGet extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchGet";

            /**
             * Reads one or more subscription offers.
             *
             * Create a request for the method "offers.batchGet".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchGet#execute()} method to invoke the remote operation.
             * <p> {@link
             * BatchGet#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) for which the subscriptions should be created or updated.
           *        Must be equal to the package_name field on all the requests.
             * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
             * @param basePlanId Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           *        read offers from multiple base plans.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersRequest}
             * @since 1.13
             */
            protected BatchGet(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchGetSubscriptionOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
            }

            @Override
            public BatchGet set$Xgafv(java.lang.String $Xgafv) {
              return (BatchGet) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchGet setAccessToken(java.lang.String accessToken) {
              return (BatchGet) super.setAccessToken(accessToken);
            }

            @Override
            public BatchGet setAlt(java.lang.String alt) {
              return (BatchGet) super.setAlt(alt);
            }

            @Override
            public BatchGet setCallback(java.lang.String callback) {
              return (BatchGet) super.setCallback(callback);
            }

            @Override
            public BatchGet setFields(java.lang.String fields) {
              return (BatchGet) super.setFields(fields);
            }

            @Override
            public BatchGet setKey(java.lang.String key) {
              return (BatchGet) super.setKey(key);
            }

            @Override
            public BatchGet setOauthToken(java.lang.String oauthToken) {
              return (BatchGet) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchGet setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchGet) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchGet setQuotaUser(java.lang.String quotaUser) {
              return (BatchGet) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchGet setUploadType(java.lang.String uploadType) {
              return (BatchGet) super.setUploadType(uploadType);
            }

            @Override
            public BatchGet setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchGet) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) for which the subscriptions should be created
             * or updated. Must be equal to the package_name field on all the requests.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) for which the subscriptions should be created or updated.
           Must be equal to the package_name field on all the requests.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) for which the subscriptions should be created
             * or updated. Must be equal to the package_name field on all the requests.
             */
            public BatchGet setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent subscription, if all updated offers belong to the same
           subscription. If this request spans multiple subscriptions, set this field to "-". Must be set.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            public BatchGet setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be read. May be
             * specified as '-' to read offers from multiple base plans.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           read offers from multiple base plans.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be read. May be
             * specified as '-' to read offers from multiple base plans.
             */
            public BatchGet setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            @Override
            public BatchGet set(String parameterName, Object value) {
              return (BatchGet) super.set(parameterName, value);
            }
          }
          /**
           * Updates a batch of subscription offers. Set the latencyTolerance field on nested requests to
           * PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
           *
           * Create a request for the method "offers.batchUpdate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
           * operation.
           *
           * @param packageName Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           *        package_name field on all the updated SubscriptionOffer resources.
           * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
           * @param basePlanId Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           *        to update offers from multiple base plans.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersRequest}
           * @return the request
           */
          public BatchUpdate batchUpdate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersRequest content) throws java.io.IOException {
            BatchUpdate result = new BatchUpdate(packageName, productId, basePlanId, content);
            initialize(result);
            return result;
          }

          public class BatchUpdate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdate";

            /**
             * Updates a batch of subscription offers. Set the latencyTolerance field on nested requests to
             * PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
             *
             * Create a request for the method "offers.batchUpdate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchUpdate#execute()} method to invoke the remote
             * operation. <p> {@link
             * BatchUpdate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           *        package_name field on all the updated SubscriptionOffer resources.
             * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
             * @param basePlanId Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           *        to update offers from multiple base plans.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersRequest}
             * @since 1.13
             */
            protected BatchUpdate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
            }

            @Override
            public BatchUpdate set$Xgafv(java.lang.String $Xgafv) {
              return (BatchUpdate) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchUpdate setAccessToken(java.lang.String accessToken) {
              return (BatchUpdate) super.setAccessToken(accessToken);
            }

            @Override
            public BatchUpdate setAlt(java.lang.String alt) {
              return (BatchUpdate) super.setAlt(alt);
            }

            @Override
            public BatchUpdate setCallback(java.lang.String callback) {
              return (BatchUpdate) super.setCallback(callback);
            }

            @Override
            public BatchUpdate setFields(java.lang.String fields) {
              return (BatchUpdate) super.setFields(fields);
            }

            @Override
            public BatchUpdate setKey(java.lang.String key) {
              return (BatchUpdate) super.setKey(key);
            }

            @Override
            public BatchUpdate setOauthToken(java.lang.String oauthToken) {
              return (BatchUpdate) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchUpdate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchUpdate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchUpdate setQuotaUser(java.lang.String quotaUser) {
              return (BatchUpdate) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchUpdate setUploadType(java.lang.String uploadType) {
              return (BatchUpdate) super.setUploadType(uploadType);
            }

            @Override
            public BatchUpdate setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchUpdate) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) of the updated subscription offers. Must be
             * equal to the package_name field on all the updated SubscriptionOffer resources.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           package_name field on all the updated SubscriptionOffer resources.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) of the updated subscription offers. Must be
             * equal to the package_name field on all the updated SubscriptionOffer resources.
             */
            public BatchUpdate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent subscription, if all updated offers belong to the same
           subscription. If this request spans multiple subscriptions, set this field to "-". Must be set.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            public BatchUpdate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be updated. May be
             * specified as '-' to update offers from multiple base plans.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           to update offers from multiple base plans.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be updated. May be
             * specified as '-' to update offers from multiple base plans.
             */
            public BatchUpdate setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            @Override
            public BatchUpdate set(String parameterName, Object value) {
              return (BatchUpdate) super.set(parameterName, value);
            }
          }
          /**
           * Updates a batch of subscription offer states. Set the latencyTolerance field on nested requests
           * to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
           *
           * Create a request for the method "offers.batchUpdateStates".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
           * operation.
           *
           * @param packageName Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           *        package_name field on all the updated SubscriptionOffer resources.
           * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
           * @param basePlanId Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           *        to update offers from multiple base plans.
           * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesRequest}
           * @return the request
           */
          public BatchUpdateStates batchUpdateStates(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesRequest content) throws java.io.IOException {
            BatchUpdateStates result = new BatchUpdateStates(packageName, productId, basePlanId, content);
            initialize(result);
            return result;
          }

          public class BatchUpdateStates extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdateStates";

            /**
             * Updates a batch of subscription offer states. Set the latencyTolerance field on nested requests
             * to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.
             *
             * Create a request for the method "offers.batchUpdateStates".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link BatchUpdateStates#execute()} method to invoke the remote
             * operation. <p> {@link BatchUpdateStates#initialize(com.google.api.client.googleapis.services.Ab
             * stractGoogleClientRequest)} must be called to initialize this instance immediately after
             * invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           *        package_name field on all the updated SubscriptionOffer resources.
             * @param productId Required. The product ID of the parent subscription, if all updated offers belong to the same
           *        subscription. If this request spans multiple subscriptions, set this field to "-". Must be
           *        set.
             * @param basePlanId Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           *        to update offers from multiple base plans.
             * @param content the {@link com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesRequest}
             * @since 1.13
             */
            protected BatchUpdateStates(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.BatchUpdateSubscriptionOfferStatesResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
            }

            @Override
            public BatchUpdateStates set$Xgafv(java.lang.String $Xgafv) {
              return (BatchUpdateStates) super.set$Xgafv($Xgafv);
            }

            @Override
            public BatchUpdateStates setAccessToken(java.lang.String accessToken) {
              return (BatchUpdateStates) super.setAccessToken(accessToken);
            }

            @Override
            public BatchUpdateStates setAlt(java.lang.String alt) {
              return (BatchUpdateStates) super.setAlt(alt);
            }

            @Override
            public BatchUpdateStates setCallback(java.lang.String callback) {
              return (BatchUpdateStates) super.setCallback(callback);
            }

            @Override
            public BatchUpdateStates setFields(java.lang.String fields) {
              return (BatchUpdateStates) super.setFields(fields);
            }

            @Override
            public BatchUpdateStates setKey(java.lang.String key) {
              return (BatchUpdateStates) super.setKey(key);
            }

            @Override
            public BatchUpdateStates setOauthToken(java.lang.String oauthToken) {
              return (BatchUpdateStates) super.setOauthToken(oauthToken);
            }

            @Override
            public BatchUpdateStates setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (BatchUpdateStates) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public BatchUpdateStates setQuotaUser(java.lang.String quotaUser) {
              return (BatchUpdateStates) super.setQuotaUser(quotaUser);
            }

            @Override
            public BatchUpdateStates setUploadType(java.lang.String uploadType) {
              return (BatchUpdateStates) super.setUploadType(uploadType);
            }

            @Override
            public BatchUpdateStates setUploadProtocol(java.lang.String uploadProtocol) {
              return (BatchUpdateStates) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) of the updated subscription offers. Must be
             * equal to the package_name field on all the updated SubscriptionOffer resources.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the updated subscription offers. Must be equal to the
           package_name field on all the updated SubscriptionOffer resources.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) of the updated subscription offers. Must be
             * equal to the package_name field on all the updated SubscriptionOffer resources.
             */
            public BatchUpdateStates setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The product ID of the parent subscription, if all updated offers belong to the same
           subscription. If this request spans multiple subscriptions, set this field to "-". Must be set.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The product ID of the parent subscription, if all updated offers belong to
             * the same subscription. If this request spans multiple subscriptions, set this field
             * to "-". Must be set.
             */
            public BatchUpdateStates setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be updated. May be
             * specified as '-' to update offers from multiple base plans.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-'
           to update offers from multiple base plans.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be updated. May be
             * specified as '-' to update offers from multiple base plans.
             */
            public BatchUpdateStates setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            @Override
            public BatchUpdateStates set(String parameterName, Object value) {
              return (BatchUpdateStates) super.set(parameterName, value);
            }
          }
          /**
           * Creates a new subscription offer. Only auto-renewing base plans can have subscription offers. The
           * offer state will be DRAFT until it is activated.
           *
           * Create a request for the method "offers.create".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) for which the offer should be created. Must be equal to the
           *        package_name field on the Subscription resource.
           * @param productId Required. The parent subscription (ID) for which the offer should be created. Must be equal to the
           *        product_id field on the SubscriptionOffer resource.
           * @param basePlanId Required. The parent base plan (ID) for which the offer should be created. Must be equal to the
           *        base_plan_id field on the SubscriptionOffer resource.
           * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionOffer}
           * @return the request
           */
          public Create create(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.SubscriptionOffer content) throws java.io.IOException {
            Create result = new Create(packageName, productId, basePlanId, content);
            initialize(result);
            return result;
          }

          public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers";

            /**
             * Creates a new subscription offer. Only auto-renewing base plans can have subscription offers.
             * The offer state will be DRAFT until it is activated.
             *
             * Create a request for the method "offers.create".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
             * <p> {@link
             * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
             * be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) for which the offer should be created. Must be equal to the
           *        package_name field on the Subscription resource.
             * @param productId Required. The parent subscription (ID) for which the offer should be created. Must be equal to the
           *        product_id field on the SubscriptionOffer resource.
             * @param basePlanId Required. The parent base plan (ID) for which the offer should be created. Must be equal to the
           *        base_plan_id field on the SubscriptionOffer resource.
             * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionOffer}
             * @since 1.13
             */
            protected Create(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, com.google.api.services.androidpublisher.model.SubscriptionOffer content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.SubscriptionOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
            }

            @Override
            public Create set$Xgafv(java.lang.String $Xgafv) {
              return (Create) super.set$Xgafv($Xgafv);
            }

            @Override
            public Create setAccessToken(java.lang.String accessToken) {
              return (Create) super.setAccessToken(accessToken);
            }

            @Override
            public Create setAlt(java.lang.String alt) {
              return (Create) super.setAlt(alt);
            }

            @Override
            public Create setCallback(java.lang.String callback) {
              return (Create) super.setCallback(callback);
            }

            @Override
            public Create setFields(java.lang.String fields) {
              return (Create) super.setFields(fields);
            }

            @Override
            public Create setKey(java.lang.String key) {
              return (Create) super.setKey(key);
            }

            @Override
            public Create setOauthToken(java.lang.String oauthToken) {
              return (Create) super.setOauthToken(oauthToken);
            }

            @Override
            public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Create) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Create setQuotaUser(java.lang.String quotaUser) {
              return (Create) super.setQuotaUser(quotaUser);
            }

            @Override
            public Create setUploadType(java.lang.String uploadType) {
              return (Create) super.setUploadType(uploadType);
            }

            @Override
            public Create setUploadProtocol(java.lang.String uploadProtocol) {
              return (Create) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) for which the offer should be created. Must
             * be equal to the package_name field on the Subscription resource.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) for which the offer should be created. Must be equal to the
           package_name field on the Subscription resource.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) for which the offer should be created. Must
             * be equal to the package_name field on the Subscription resource.
             */
            public Create setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The parent subscription (ID) for which the offer should be created. Must be
             * equal to the product_id field on the SubscriptionOffer resource.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) for which the offer should be created. Must be equal to the
           product_id field on the SubscriptionOffer resource.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The parent subscription (ID) for which the offer should be created. Must be
             * equal to the product_id field on the SubscriptionOffer resource.
             */
            public Create setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent base plan (ID) for which the offer should be created. Must be
             * equal to the base_plan_id field on the SubscriptionOffer resource.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) for which the offer should be created. Must be equal to the
           base_plan_id field on the SubscriptionOffer resource.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. The parent base plan (ID) for which the offer should be created. Must be
             * equal to the base_plan_id field on the SubscriptionOffer resource.
             */
            public Create setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /**
             * Required. The ID to use for the offer. For the requirements on this format, see the
             * documentation of the offer_id field on the SubscriptionOffer resource.
             */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The ID to use for the offer. For the requirements on this format, see the documentation
           of the offer_id field on the SubscriptionOffer resource.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /**
             * Required. The ID to use for the offer. For the requirements on this format, see the
             * documentation of the offer_id field on the SubscriptionOffer resource.
             */
            public Create setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            /**
             * Required. A string representing the version of available regions being used for the
             * specified resource. Regional prices and latest supported version for the resource
             * have to be specified according to the information published in [this
             * article](https://support.google.com/googleplay/android-developer/answer/10532353).
             * Each time the supported locations substantially change, the version will be
             * incremented. Using this field will ensure that creating and updating the resource
             * with an older region's version and set of regional prices and currencies will succeed
             * even though a new version is available.
             */
            @com.google.api.client.util.Key("regionsVersion.version")
            private java.lang.String regionsVersionVersion;

            /** Required. A string representing the version of available regions being used for the specified
           resource. Regional prices and latest supported version for the resource have to be specified
           according to the information published in [this
           article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the
           supported locations substantially change, the version will be incremented. Using this field will
           ensure that creating and updating the resource with an older region's version and set of regional
           prices and currencies will succeed even though a new version is available.
             */
            public java.lang.String getRegionsVersionVersion() {
              return regionsVersionVersion;
            }

            /**
             * Required. A string representing the version of available regions being used for the
             * specified resource. Regional prices and latest supported version for the resource
             * have to be specified according to the information published in [this
             * article](https://support.google.com/googleplay/android-developer/answer/10532353).
             * Each time the supported locations substantially change, the version will be
             * incremented. Using this field will ensure that creating and updating the resource
             * with an older region's version and set of regional prices and currencies will succeed
             * even though a new version is available.
             */
            public Create setRegionsVersionVersion(java.lang.String regionsVersionVersion) {
              this.regionsVersionVersion = regionsVersionVersion;
              return this;
            }

            @Override
            public Create set(String parameterName, Object value) {
              return (Create) super.set(parameterName, value);
            }
          }
          /**
           * Deactivates a subscription offer. Once deactivated, existing subscribers will maintain their
           * subscription, but the offer will become unavailable to new subscribers.
           *
           * Create a request for the method "offers.deactivate".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to deactivate.
           * @param productId Required. The parent subscription (ID) of the offer to deactivate.
           * @param basePlanId Required. The parent base plan (ID) of the offer to deactivate.
           * @param offerId Required. The unique offer ID of the offer to deactivate.
           * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateSubscriptionOfferRequest}
           * @return the request
           */
          public Deactivate deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.DeactivateSubscriptionOfferRequest content) throws java.io.IOException {
            Deactivate result = new Deactivate(packageName, productId, basePlanId, offerId, content);
            initialize(result);
            return result;
          }

          public class Deactivate extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:deactivate";

            /**
             * Deactivates a subscription offer. Once deactivated, existing subscribers will maintain their
             * subscription, but the offer will become unavailable to new subscribers.
             *
             * Create a request for the method "offers.deactivate".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Deactivate#execute()} method to invoke the remote
             * operation. <p> {@link
             * Deactivate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to deactivate.
             * @param productId Required. The parent subscription (ID) of the offer to deactivate.
             * @param basePlanId Required. The parent base plan (ID) of the offer to deactivate.
             * @param offerId Required. The unique offer ID of the offer to deactivate.
             * @param content the {@link com.google.api.services.androidpublisher.model.DeactivateSubscriptionOfferRequest}
             * @since 1.13
             */
            protected Deactivate(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.DeactivateSubscriptionOfferRequest content) {
              super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.SubscriptionOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Deactivate set$Xgafv(java.lang.String $Xgafv) {
              return (Deactivate) super.set$Xgafv($Xgafv);
            }

            @Override
            public Deactivate setAccessToken(java.lang.String accessToken) {
              return (Deactivate) super.setAccessToken(accessToken);
            }

            @Override
            public Deactivate setAlt(java.lang.String alt) {
              return (Deactivate) super.setAlt(alt);
            }

            @Override
            public Deactivate setCallback(java.lang.String callback) {
              return (Deactivate) super.setCallback(callback);
            }

            @Override
            public Deactivate setFields(java.lang.String fields) {
              return (Deactivate) super.setFields(fields);
            }

            @Override
            public Deactivate setKey(java.lang.String key) {
              return (Deactivate) super.setKey(key);
            }

            @Override
            public Deactivate setOauthToken(java.lang.String oauthToken) {
              return (Deactivate) super.setOauthToken(oauthToken);
            }

            @Override
            public Deactivate setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Deactivate) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Deactivate setQuotaUser(java.lang.String quotaUser) {
              return (Deactivate) super.setQuotaUser(quotaUser);
            }

            @Override
            public Deactivate setUploadType(java.lang.String uploadType) {
              return (Deactivate) super.setUploadType(uploadType);
            }

            @Override
            public Deactivate setUploadProtocol(java.lang.String uploadProtocol) {
              return (Deactivate) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to deactivate.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to deactivate. */
            public Deactivate setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent subscription (ID) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) of the offer to deactivate.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent subscription (ID) of the offer to deactivate. */
            public Deactivate setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent base plan (ID) of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) of the offer to deactivate.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /** Required. The parent base plan (ID) of the offer to deactivate. */
            public Deactivate setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /** Required. The unique offer ID of the offer to deactivate. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The unique offer ID of the offer to deactivate.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The unique offer ID of the offer to deactivate. */
            public Deactivate setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Deactivate set(String parameterName, Object value) {
              return (Deactivate) super.set(parameterName, value);
            }
          }
          /**
           * Deletes a subscription offer. Can only be done for draft offers. This action is irreversible.
           *
           * Create a request for the method "offers.delete".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to delete.
           * @param productId Required. The parent subscription (ID) of the offer to delete.
           * @param basePlanId Required. The parent base plan (ID) of the offer to delete.
           * @param offerId Required. The unique offer ID of the offer to delete.
           * @return the request
           */
          public Delete delete(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId) throws java.io.IOException {
            Delete result = new Delete(packageName, productId, basePlanId, offerId);
            initialize(result);
            return result;
          }

          public class Delete extends AndroidPublisherRequest<Void> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}";

            /**
             * Deletes a subscription offer. Can only be done for draft offers. This action is irreversible.
             *
             * Create a request for the method "offers.delete".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
             * <p> {@link
             * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
             * be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to delete.
             * @param productId Required. The parent subscription (ID) of the offer to delete.
             * @param basePlanId Required. The parent base plan (ID) of the offer to delete.
             * @param offerId Required. The unique offer ID of the offer to delete.
             * @since 1.13
             */
            protected Delete(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId) {
              super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Delete set$Xgafv(java.lang.String $Xgafv) {
              return (Delete) super.set$Xgafv($Xgafv);
            }

            @Override
            public Delete setAccessToken(java.lang.String accessToken) {
              return (Delete) super.setAccessToken(accessToken);
            }

            @Override
            public Delete setAlt(java.lang.String alt) {
              return (Delete) super.setAlt(alt);
            }

            @Override
            public Delete setCallback(java.lang.String callback) {
              return (Delete) super.setCallback(callback);
            }

            @Override
            public Delete setFields(java.lang.String fields) {
              return (Delete) super.setFields(fields);
            }

            @Override
            public Delete setKey(java.lang.String key) {
              return (Delete) super.setKey(key);
            }

            @Override
            public Delete setOauthToken(java.lang.String oauthToken) {
              return (Delete) super.setOauthToken(oauthToken);
            }

            @Override
            public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Delete) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Delete setQuotaUser(java.lang.String quotaUser) {
              return (Delete) super.setQuotaUser(quotaUser);
            }

            @Override
            public Delete setUploadType(java.lang.String uploadType) {
              return (Delete) super.setUploadType(uploadType);
            }

            @Override
            public Delete setUploadProtocol(java.lang.String uploadProtocol) {
              return (Delete) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to delete. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to delete.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to delete. */
            public Delete setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent subscription (ID) of the offer to delete. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) of the offer to delete.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent subscription (ID) of the offer to delete. */
            public Delete setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent base plan (ID) of the offer to delete. */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) of the offer to delete.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /** Required. The parent base plan (ID) of the offer to delete. */
            public Delete setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /** Required. The unique offer ID of the offer to delete. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The unique offer ID of the offer to delete.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The unique offer ID of the offer to delete. */
            public Delete setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Delete set(String parameterName, Object value) {
              return (Delete) super.set(parameterName, value);
            }
          }
          /**
           * Reads a single offer
           *
           * Create a request for the method "offers.get".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) of the offer to get.
           * @param productId Required. The parent subscription (ID) of the offer to get.
           * @param basePlanId Required. The parent base plan (ID) of the offer to get.
           * @param offerId Required. The unique offer ID of the offer to get.
           * @return the request
           */
          public Get get(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId) throws java.io.IOException {
            Get result = new Get(packageName, productId, basePlanId, offerId);
            initialize(result);
            return result;
          }

          public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}";

            /**
             * Reads a single offer
             *
             * Create a request for the method "offers.get".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
             * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) of the offer to get.
             * @param productId Required. The parent subscription (ID) of the offer to get.
             * @param basePlanId Required. The parent base plan (ID) of the offer to get.
             * @param offerId Required. The unique offer ID of the offer to get.
             * @since 1.13
             */
            protected Get(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId) {
              super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.SubscriptionOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
              return super.executeUsingHead();
            }

            @Override
            public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
              return super.buildHttpRequestUsingHead();
            }

            @Override
            public Get set$Xgafv(java.lang.String $Xgafv) {
              return (Get) super.set$Xgafv($Xgafv);
            }

            @Override
            public Get setAccessToken(java.lang.String accessToken) {
              return (Get) super.setAccessToken(accessToken);
            }

            @Override
            public Get setAlt(java.lang.String alt) {
              return (Get) super.setAlt(alt);
            }

            @Override
            public Get setCallback(java.lang.String callback) {
              return (Get) super.setCallback(callback);
            }

            @Override
            public Get setFields(java.lang.String fields) {
              return (Get) super.setFields(fields);
            }

            @Override
            public Get setKey(java.lang.String key) {
              return (Get) super.setKey(key);
            }

            @Override
            public Get setOauthToken(java.lang.String oauthToken) {
              return (Get) super.setOauthToken(oauthToken);
            }

            @Override
            public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Get) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Get setQuotaUser(java.lang.String quotaUser) {
              return (Get) super.setQuotaUser(quotaUser);
            }

            @Override
            public Get setUploadType(java.lang.String uploadType) {
              return (Get) super.setUploadType(uploadType);
            }

            @Override
            public Get setUploadProtocol(java.lang.String uploadProtocol) {
              return (Get) super.setUploadProtocol(uploadProtocol);
            }

            /** Required. The parent app (package name) of the offer to get. */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) of the offer to get.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /** Required. The parent app (package name) of the offer to get. */
            public Get setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. The parent subscription (ID) of the offer to get. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) of the offer to get.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. The parent subscription (ID) of the offer to get. */
            public Get setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /** Required. The parent base plan (ID) of the offer to get. */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) of the offer to get.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /** Required. The parent base plan (ID) of the offer to get. */
            public Get setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /** Required. The unique offer ID of the offer to get. */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. The unique offer ID of the offer to get.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /** Required. The unique offer ID of the offer to get. */
            public Get setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            @Override
            public Get set(String parameterName, Object value) {
              return (Get) super.set(parameterName, value);
            }
          }
          /**
           * Lists all offers under a given subscription.
           *
           * Create a request for the method "offers.list".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. The parent app (package name) for which the subscriptions should be read.
           * @param productId Required. The parent subscription (ID) for which the offers should be read. May be specified as '-'
           *        to read all offers under an app.
           * @param basePlanId Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           *        read all offers under a subscription or an app. Must be specified as '-' if product_id is
           *        specified as '-'.
           * @return the request
           */
          public List list(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId) throws java.io.IOException {
            List result = new List(packageName, productId, basePlanId);
            initialize(result);
            return result;
          }

          public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListSubscriptionOffersResponse> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers";

            /**
             * Lists all offers under a given subscription.
             *
             * Create a request for the method "offers.list".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
             * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. The parent app (package name) for which the subscriptions should be read.
             * @param productId Required. The parent subscription (ID) for which the offers should be read. May be specified as '-'
           *        to read all offers under an app.
             * @param basePlanId Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           *        read all offers under a subscription or an app. Must be specified as '-' if product_id is
           *        specified as '-'.
             * @since 1.13
             */
            protected List(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId) {
              super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListSubscriptionOffersResponse.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
            }

            @Override
            public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
              return super.executeUsingHead();
            }

            @Override
            public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
              return super.buildHttpRequestUsingHead();
            }

            @Override
            public List set$Xgafv(java.lang.String $Xgafv) {
              return (List) super.set$Xgafv($Xgafv);
            }

            @Override
            public List setAccessToken(java.lang.String accessToken) {
              return (List) super.setAccessToken(accessToken);
            }

            @Override
            public List setAlt(java.lang.String alt) {
              return (List) super.setAlt(alt);
            }

            @Override
            public List setCallback(java.lang.String callback) {
              return (List) super.setCallback(callback);
            }

            @Override
            public List setFields(java.lang.String fields) {
              return (List) super.setFields(fields);
            }

            @Override
            public List setKey(java.lang.String key) {
              return (List) super.setKey(key);
            }

            @Override
            public List setOauthToken(java.lang.String oauthToken) {
              return (List) super.setOauthToken(oauthToken);
            }

            @Override
            public List setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (List) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public List setQuotaUser(java.lang.String quotaUser) {
              return (List) super.setQuotaUser(quotaUser);
            }

            @Override
            public List setUploadType(java.lang.String uploadType) {
              return (List) super.setUploadType(uploadType);
            }

            @Override
            public List setUploadProtocol(java.lang.String uploadProtocol) {
              return (List) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. The parent app (package name) for which the subscriptions should be read.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. The parent app (package name) for which the subscriptions should be read.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. The parent app (package name) for which the subscriptions should be read.
             */
            public List setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /**
             * Required. The parent subscription (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under an app.
             */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. The parent subscription (ID) for which the offers should be read. May be specified as '-'
           to read all offers under an app.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /**
             * Required. The parent subscription (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under an app.
             */
            public List setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under a subscription or an app. Must be specified
             * as '-' if product_id is specified as '-'.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to
           read all offers under a subscription or an app. Must be specified as '-' if product_id is specified
           as '-'.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. The parent base plan (ID) for which the offers should be read. May be
             * specified as '-' to read all offers under a subscription or an app. Must be specified
             * as '-' if product_id is specified as '-'.
             */
            public List setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /**
             * The maximum number of subscriptions to return. The service may return fewer than this
             * value. If unspecified, at most 50 subscriptions will be returned. The maximum value
             * is 1000; values above 1000 will be coerced to 1000.
             */
            @com.google.api.client.util.Key
            private java.lang.Integer pageSize;

            /** The maximum number of subscriptions to return. The service may return fewer than this value. If
           unspecified, at most 50 subscriptions will be returned. The maximum value is 1000; values above
           1000 will be coerced to 1000.
             */
            public java.lang.Integer getPageSize() {
              return pageSize;
            }

            /**
             * The maximum number of subscriptions to return. The service may return fewer than this
             * value. If unspecified, at most 50 subscriptions will be returned. The maximum value
             * is 1000; values above 1000 will be coerced to 1000.
             */
            public List setPageSize(java.lang.Integer pageSize) {
              this.pageSize = pageSize;
              return this;
            }

            /**
             * A page token, received from a previous `ListSubscriptionsOffers` call. Provide this
             * to retrieve the subsequent page. When paginating, all other parameters provided to
             * `ListSubscriptionOffers` must match the call that provided the page token.
             */
            @com.google.api.client.util.Key
            private java.lang.String pageToken;

            /** A page token, received from a previous `ListSubscriptionsOffers` call. Provide this to retrieve the
           subsequent page. When paginating, all other parameters provided to `ListSubscriptionOffers` must
           match the call that provided the page token.
             */
            public java.lang.String getPageToken() {
              return pageToken;
            }

            /**
             * A page token, received from a previous `ListSubscriptionsOffers` call. Provide this
             * to retrieve the subsequent page. When paginating, all other parameters provided to
             * `ListSubscriptionOffers` must match the call that provided the page token.
             */
            public List setPageToken(java.lang.String pageToken) {
              this.pageToken = pageToken;
              return this;
            }

            @Override
            public List set(String parameterName, Object value) {
              return (List) super.set(parameterName, value);
            }
          }
          /**
           * Updates an existing subscription offer.
           *
           * Create a request for the method "offers.patch".
           *
           * This request holds the parameters needed by the androidpublisher server.  After setting any
           * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
           *
           * @param packageName Required. Immutable. The package name of the app the parent subscription belongs to.
           * @param productId Required. Immutable. The ID of the parent subscription this offer belongs to.
           * @param basePlanId Required. Immutable. The ID of the base plan to which this offer is an extension.
           * @param offerId Required. Immutable. Unique ID of this subscription offer. Must be unique within the base plan.
           * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionOffer}
           * @return the request
           */
          public Patch patch(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.SubscriptionOffer content) throws java.io.IOException {
            Patch result = new Patch(packageName, productId, basePlanId, offerId, content);
            initialize(result);
            return result;
          }

          public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionOffer> {

            private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}";

            /**
             * Updates an existing subscription offer.
             *
             * Create a request for the method "offers.patch".
             *
             * This request holds the parameters needed by the the androidpublisher server.  After setting any
             * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
             * <p> {@link
             * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
             * be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param packageName Required. Immutable. The package name of the app the parent subscription belongs to.
             * @param productId Required. Immutable. The ID of the parent subscription this offer belongs to.
             * @param basePlanId Required. Immutable. The ID of the base plan to which this offer is an extension.
             * @param offerId Required. Immutable. Unique ID of this subscription offer. Must be unique within the base plan.
             * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionOffer}
             * @since 1.13
             */
            protected Patch(java.lang.String packageName, java.lang.String productId, java.lang.String basePlanId, java.lang.String offerId, com.google.api.services.androidpublisher.model.SubscriptionOffer content) {
              super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.SubscriptionOffer.class);
              this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
              this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
              this.basePlanId = com.google.api.client.util.Preconditions.checkNotNull(basePlanId, "Required parameter basePlanId must be specified.");
              this.offerId = com.google.api.client.util.Preconditions.checkNotNull(offerId, "Required parameter offerId must be specified.");
            }

            @Override
            public Patch set$Xgafv(java.lang.String $Xgafv) {
              return (Patch) super.set$Xgafv($Xgafv);
            }

            @Override
            public Patch setAccessToken(java.lang.String accessToken) {
              return (Patch) super.setAccessToken(accessToken);
            }

            @Override
            public Patch setAlt(java.lang.String alt) {
              return (Patch) super.setAlt(alt);
            }

            @Override
            public Patch setCallback(java.lang.String callback) {
              return (Patch) super.setCallback(callback);
            }

            @Override
            public Patch setFields(java.lang.String fields) {
              return (Patch) super.setFields(fields);
            }

            @Override
            public Patch setKey(java.lang.String key) {
              return (Patch) super.setKey(key);
            }

            @Override
            public Patch setOauthToken(java.lang.String oauthToken) {
              return (Patch) super.setOauthToken(oauthToken);
            }

            @Override
            public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
              return (Patch) super.setPrettyPrint(prettyPrint);
            }

            @Override
            public Patch setQuotaUser(java.lang.String quotaUser) {
              return (Patch) super.setQuotaUser(quotaUser);
            }

            @Override
            public Patch setUploadType(java.lang.String uploadType) {
              return (Patch) super.setUploadType(uploadType);
            }

            @Override
            public Patch setUploadProtocol(java.lang.String uploadProtocol) {
              return (Patch) super.setUploadProtocol(uploadProtocol);
            }

            /**
             * Required. Immutable. The package name of the app the parent subscription belongs to.
             */
            @com.google.api.client.util.Key
            private java.lang.String packageName;

            /** Required. Immutable. The package name of the app the parent subscription belongs to.
             */
            public java.lang.String getPackageName() {
              return packageName;
            }

            /**
             * Required. Immutable. The package name of the app the parent subscription belongs to.
             */
            public Patch setPackageName(java.lang.String packageName) {
              this.packageName = packageName;
              return this;
            }

            /** Required. Immutable. The ID of the parent subscription this offer belongs to. */
            @com.google.api.client.util.Key
            private java.lang.String productId;

            /** Required. Immutable. The ID of the parent subscription this offer belongs to.
             */
            public java.lang.String getProductId() {
              return productId;
            }

            /** Required. Immutable. The ID of the parent subscription this offer belongs to. */
            public Patch setProductId(java.lang.String productId) {
              this.productId = productId;
              return this;
            }

            /**
             * Required. Immutable. The ID of the base plan to which this offer is an extension.
             */
            @com.google.api.client.util.Key
            private java.lang.String basePlanId;

            /** Required. Immutable. The ID of the base plan to which this offer is an extension.
             */
            public java.lang.String getBasePlanId() {
              return basePlanId;
            }

            /**
             * Required. Immutable. The ID of the base plan to which this offer is an extension.
             */
            public Patch setBasePlanId(java.lang.String basePlanId) {
              this.basePlanId = basePlanId;
              return this;
            }

            /**
             * Required. Immutable. Unique ID of this subscription offer. Must be unique within the
             * base plan.
             */
            @com.google.api.client.util.Key
            private java.lang.String offerId;

            /** Required. Immutable. Unique ID of this subscription offer. Must be unique within the base plan.
             */
            public java.lang.String getOfferId() {
              return offerId;
            }

            /**
             * Required. Immutable. Unique ID of this subscription offer. Must be unique within the
             * base plan.
             */
            public Patch setOfferId(java.lang.String offerId) {
              this.offerId = offerId;
              return this;
            }

            /**
             * Optional. If set to true, and the subscription offer with the given package_name,
             * product_id, base_plan_id and offer_id doesn't exist, an offer will be created. If a
             * new offer is created, update_mask is ignored.
             */
            @com.google.api.client.util.Key
            private java.lang.Boolean allowMissing;

            /** Optional. If set to true, and the subscription offer with the given package_name, product_id,
           base_plan_id and offer_id doesn't exist, an offer will be created. If a new offer is created,
           update_mask is ignored.
             */
            public java.lang.Boolean getAllowMissing() {
              return allowMissing;
            }

            /**
             * Optional. If set to true, and the subscription offer with the given package_name,
             * product_id, base_plan_id and offer_id doesn't exist, an offer will be created. If a
             * new offer is created, update_mask is ignored.
             */
            public Patch setAllowMissing(java.lang.Boolean allowMissing) {
              this.allowMissing = allowMissing;
              return this;
            }

            /**
             * Optional. The latency tolerance for the propagation of this product update. Defaults
             * to latency-sensitive.
             */
            @com.google.api.client.util.Key
            private java.lang.String latencyTolerance;

            /** Optional. The latency tolerance for the propagation of this product update. Defaults to latency-
           sensitive.
             */
            public java.lang.String getLatencyTolerance() {
              return latencyTolerance;
            }

            /**
             * Optional. The latency tolerance for the propagation of this product update. Defaults
             * to latency-sensitive.
             */
            public Patch setLatencyTolerance(java.lang.String latencyTolerance) {
              this.latencyTolerance = latencyTolerance;
              return this;
            }

            /**
             * Required. A string representing the version of available regions being used for the
             * specified resource. Regional prices and latest supported version for the resource
             * have to be specified according to the information published in [this
             * article](https://support.google.com/googleplay/android-developer/answer/10532353).
             * Each time the supported locations substantially change, the version will be
             * incremented. Using this field will ensure that creating and updating the resource
             * with an older region's version and set of regional prices and currencies will succeed
             * even though a new version is available.
             */
            @com.google.api.client.util.Key("regionsVersion.version")
            private java.lang.String regionsVersionVersion;

            /** Required. A string representing the version of available regions being used for the specified
           resource. Regional prices and latest supported version for the resource have to be specified
           according to the information published in [this
           article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the
           supported locations substantially change, the version will be incremented. Using this field will
           ensure that creating and updating the resource with an older region's version and set of regional
           prices and currencies will succeed even though a new version is available.
             */
            public java.lang.String getRegionsVersionVersion() {
              return regionsVersionVersion;
            }

            /**
             * Required. A string representing the version of available regions being used for the
             * specified resource. Regional prices and latest supported version for the resource
             * have to be specified according to the information published in [this
             * article](https://support.google.com/googleplay/android-developer/answer/10532353).
             * Each time the supported locations substantially change, the version will be
             * incremented. Using this field will ensure that creating and updating the resource
             * with an older region's version and set of regional prices and currencies will succeed
             * even though a new version is available.
             */
            public Patch setRegionsVersionVersion(java.lang.String regionsVersionVersion) {
              this.regionsVersionVersion = regionsVersionVersion;
              return this;
            }

            /** Required. The list of fields to be updated. */
            @com.google.api.client.util.Key
            private String updateMask;

            /** Required. The list of fields to be updated.
             */
            public String getUpdateMask() {
              return updateMask;
            }

            /** Required. The list of fields to be updated. */
            public Patch setUpdateMask(String updateMask) {
              this.updateMask = updateMask;
              return this;
            }

            @Override
            public Patch set(String parameterName, Object value) {
              return (Patch) super.set(parameterName, value);
            }
          }

        }
      }
    }
  }

  /**
   * An accessor for creating requests from the Orders collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Orders.List request = androidpublisher.orders().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Orders orders() {
    return new Orders();
  }

  /**
   * The "orders" collection of methods.
   */
  public class Orders {

    /**
     * Get order details for a list of orders.
     *
     * Create a request for the method "orders.batchget".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Batchget#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. The package name of the application for which this subscription or in-app item was
     *        purchased (for example, 'com.some.thing').
     * @return the request
     */
    public Batchget batchget(java.lang.String packageName) throws java.io.IOException {
      Batchget result = new Batchget(packageName);
      initialize(result);
      return result;
    }

    public class Batchget extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.BatchGetOrdersResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/orders:batchGet";

      /**
       * Get order details for a list of orders.
       *
       * Create a request for the method "orders.batchget".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Batchget#execute()} method to invoke the remote operation.
       * <p> {@link
       * Batchget#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. The package name of the application for which this subscription or in-app item was
     *        purchased (for example, 'com.some.thing').
       * @since 1.13
       */
      protected Batchget(java.lang.String packageName) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.BatchGetOrdersResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Batchget set$Xgafv(java.lang.String $Xgafv) {
        return (Batchget) super.set$Xgafv($Xgafv);
      }

      @Override
      public Batchget setAccessToken(java.lang.String accessToken) {
        return (Batchget) super.setAccessToken(accessToken);
      }

      @Override
      public Batchget setAlt(java.lang.String alt) {
        return (Batchget) super.setAlt(alt);
      }

      @Override
      public Batchget setCallback(java.lang.String callback) {
        return (Batchget) super.setCallback(callback);
      }

      @Override
      public Batchget setFields(java.lang.String fields) {
        return (Batchget) super.setFields(fields);
      }

      @Override
      public Batchget setKey(java.lang.String key) {
        return (Batchget) super.setKey(key);
      }

      @Override
      public Batchget setOauthToken(java.lang.String oauthToken) {
        return (Batchget) super.setOauthToken(oauthToken);
      }

      @Override
      public Batchget setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Batchget) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Batchget setQuotaUser(java.lang.String quotaUser) {
        return (Batchget) super.setQuotaUser(quotaUser);
      }

      @Override
      public Batchget setUploadType(java.lang.String uploadType) {
        return (Batchget) super.setUploadType(uploadType);
      }

      @Override
      public Batchget setUploadProtocol(java.lang.String uploadProtocol) {
        return (Batchget) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The package name of the application for which this subscription or in-app item
       * was purchased (for example, 'com.some.thing').
       */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. The package name of the application for which this subscription or in-app item was
     purchased (for example, 'com.some.thing').
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /**
       * Required. The package name of the application for which this subscription or in-app item
       * was purchased (for example, 'com.some.thing').
       */
      public Batchget setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /**
       * Required. The list of order IDs to retrieve order details for. There must be between 1 and
       * 1000 (inclusive) order IDs per request. If any order ID is not found or does not match the
       * provided package, the entire request will fail with an error. The order IDs must be
       * distinct.
       */
      @com.google.api.client.util.Key
      private java.util.List<java.lang.String> orderIds;

      /** Required. The list of order IDs to retrieve order details for. There must be between 1 and 1000
     (inclusive) order IDs per request. If any order ID is not found or does not match the provided
     package, the entire request will fail with an error. The order IDs must be distinct.
       */
      public java.util.List<java.lang.String> getOrderIds() {
        return orderIds;
      }

      /**
       * Required. The list of order IDs to retrieve order details for. There must be between 1 and
       * 1000 (inclusive) order IDs per request. If any order ID is not found or does not match the
       * provided package, the entire request will fail with an error. The order IDs must be
       * distinct.
       */
      public Batchget setOrderIds(java.util.List<java.lang.String> orderIds) {
        this.orderIds = orderIds;
        return this;
      }

      @Override
      public Batchget set(String parameterName, Object value) {
        return (Batchget) super.set(parameterName, value);
      }
    }
    /**
     * Get order details for a single order.
     *
     * Create a request for the method "orders.get".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param packageName Required. The package name of the application for which this subscription or in-app item was
     *        purchased (for example, 'com.some.thing').
     * @param orderId Required. The order ID provided to the user when the subscription or in-app order was purchased.
     * @return the request
     */
    public Get get(java.lang.String packageName, java.lang.String orderId) throws java.io.IOException {
      Get result = new Get(packageName, orderId);
      initialize(result);
      return result;
    }

    public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Order> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/orders/{orderId}";

      /**
       * Get order details for a single order.
       *
       * Create a request for the method "orders.get".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Required. The package name of the application for which this subscription or in-app item was
     *        purchased (for example, 'com.some.thing').
       * @param orderId Required. The order ID provided to the user when the subscription or in-app order was purchased.
       * @since 1.13
       */
      protected Get(java.lang.String packageName, java.lang.String orderId) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Order.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.orderId = com.google.api.client.util.Preconditions.checkNotNull(orderId, "Required parameter orderId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. The package name of the application for which this subscription or in-app item
       * was purchased (for example, 'com.some.thing').
       */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Required. The package name of the application for which this subscription or in-app item was
     purchased (for example, 'com.some.thing').
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /**
       * Required. The package name of the application for which this subscription or in-app item
       * was purchased (for example, 'com.some.thing').
       */
      public Get setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /**
       * Required. The order ID provided to the user when the subscription or in-app order was
       * purchased.
       */
      @com.google.api.client.util.Key
      private java.lang.String orderId;

      /** Required. The order ID provided to the user when the subscription or in-app order was purchased.
       */
      public java.lang.String getOrderId() {
        return orderId;
      }

      /**
       * Required. The order ID provided to the user when the subscription or in-app order was
       * purchased.
       */
      public Get setOrderId(java.lang.String orderId) {
        this.orderId = orderId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Refunds a user's subscription or in-app purchase order. Orders older than 3 years cannot be
     * refunded.
     *
     * Create a request for the method "orders.refund".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Refund#execute()} method to invoke the remote operation.
     *
     * @param packageName The package name of the application for which this subscription or in-app item was purchased (for
     *        example, 'com.some.thing').
     * @param orderId The order ID provided to the user when the subscription or in-app order was purchased.
     * @return the request
     */
    public Refund refund(java.lang.String packageName, java.lang.String orderId) throws java.io.IOException {
      Refund result = new Refund(packageName, orderId);
      initialize(result);
      return result;
    }

    public class Refund extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund";

      /**
       * Refunds a user's subscription or in-app purchase order. Orders older than 3 years cannot be
       * refunded.
       *
       * Create a request for the method "orders.refund".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Refund#execute()} method to invoke the remote operation.
       * <p> {@link
       * Refund#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName The package name of the application for which this subscription or in-app item was purchased (for
     *        example, 'com.some.thing').
       * @param orderId The order ID provided to the user when the subscription or in-app order was purchased.
       * @since 1.13
       */
      protected Refund(java.lang.String packageName, java.lang.String orderId) {
        super(AndroidPublisher.this, "POST", REST_PATH, null, Void.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.orderId = com.google.api.client.util.Preconditions.checkNotNull(orderId, "Required parameter orderId must be specified.");
      }

      @Override
      public Refund set$Xgafv(java.lang.String $Xgafv) {
        return (Refund) super.set$Xgafv($Xgafv);
      }

      @Override
      public Refund setAccessToken(java.lang.String accessToken) {
        return (Refund) super.setAccessToken(accessToken);
      }

      @Override
      public Refund setAlt(java.lang.String alt) {
        return (Refund) super.setAlt(alt);
      }

      @Override
      public Refund setCallback(java.lang.String callback) {
        return (Refund) super.setCallback(callback);
      }

      @Override
      public Refund setFields(java.lang.String fields) {
        return (Refund) super.setFields(fields);
      }

      @Override
      public Refund setKey(java.lang.String key) {
        return (Refund) super.setKey(key);
      }

      @Override
      public Refund setOauthToken(java.lang.String oauthToken) {
        return (Refund) super.setOauthToken(oauthToken);
      }

      @Override
      public Refund setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Refund) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Refund setQuotaUser(java.lang.String quotaUser) {
        return (Refund) super.setQuotaUser(quotaUser);
      }

      @Override
      public Refund setUploadType(java.lang.String uploadType) {
        return (Refund) super.setUploadType(uploadType);
      }

      @Override
      public Refund setUploadProtocol(java.lang.String uploadProtocol) {
        return (Refund) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * The package name of the application for which this subscription or in-app item was
       * purchased (for example, 'com.some.thing').
       */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** The package name of the application for which this subscription or in-app item was purchased (for
     example, 'com.some.thing').
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /**
       * The package name of the application for which this subscription or in-app item was
       * purchased (for example, 'com.some.thing').
       */
      public Refund setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** The order ID provided to the user when the subscription or in-app order was purchased. */
      @com.google.api.client.util.Key
      private java.lang.String orderId;

      /** The order ID provided to the user when the subscription or in-app order was purchased.
       */
      public java.lang.String getOrderId() {
        return orderId;
      }

      /** The order ID provided to the user when the subscription or in-app order was purchased. */
      public Refund setOrderId(java.lang.String orderId) {
        this.orderId = orderId;
        return this;
      }

      /**
       * Whether to revoke the purchased item. If set to true, access to the subscription or in-app
       * item will be terminated immediately. If the item is a recurring subscription, all future
       * payments will also be terminated. Consumed in-app items need to be handled by developer's
       * app. (optional).
       */
      @com.google.api.client.util.Key
      private java.lang.Boolean revoke;

      /** Whether to revoke the purchased item. If set to true, access to the subscription or in-app item
     will be terminated immediately. If the item is a recurring subscription, all future payments will
     also be terminated. Consumed in-app items need to be handled by developer's app. (optional).
       */
      public java.lang.Boolean getRevoke() {
        return revoke;
      }

      /**
       * Whether to revoke the purchased item. If set to true, access to the subscription or in-app
       * item will be terminated immediately. If the item is a recurring subscription, all future
       * payments will also be terminated. Consumed in-app items need to be handled by developer's
       * app. (optional).
       */
      public Refund setRevoke(java.lang.Boolean revoke) {
        this.revoke = revoke;
        return this;
      }

      @Override
      public Refund set(String parameterName, Object value) {
        return (Refund) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Purchases collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Purchases.List request = androidpublisher.purchases().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Purchases purchases() {
    return new Purchases();
  }

  /**
   * The "purchases" collection of methods.
   */
  public class Purchases {

    /**
     * An accessor for creating requests from the Products collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Products.List request = androidpublisher.products().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Products products() {
      return new Products();
    }

    /**
     * The "products" collection of methods.
     */
    public class Products {

      /**
       * Acknowledges a purchase of an inapp item.
       *
       * Create a request for the method "products.acknowledge".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Acknowledge#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
       * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
       * @param token The token provided to the user's device when the inapp product was purchased.
       * @param content the {@link com.google.api.services.androidpublisher.model.ProductPurchasesAcknowledgeRequest}
       * @return the request
       */
      public Acknowledge acknowledge(java.lang.String packageName, java.lang.String productId, java.lang.String token, com.google.api.services.androidpublisher.model.ProductPurchasesAcknowledgeRequest content) throws java.io.IOException {
        Acknowledge result = new Acknowledge(packageName, productId, token, content);
        initialize(result);
        return result;
      }

      public class Acknowledge extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:acknowledge";

        /**
         * Acknowledges a purchase of an inapp item.
         *
         * Create a request for the method "products.acknowledge".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Acknowledge#execute()} method to invoke the remote
         * operation. <p> {@link
         * Acknowledge#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
         * @param token The token provided to the user's device when the inapp product was purchased.
         * @param content the {@link com.google.api.services.androidpublisher.model.ProductPurchasesAcknowledgeRequest}
         * @since 1.13
         */
        protected Acknowledge(java.lang.String packageName, java.lang.String productId, java.lang.String token, com.google.api.services.androidpublisher.model.ProductPurchasesAcknowledgeRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Acknowledge set$Xgafv(java.lang.String $Xgafv) {
          return (Acknowledge) super.set$Xgafv($Xgafv);
        }

        @Override
        public Acknowledge setAccessToken(java.lang.String accessToken) {
          return (Acknowledge) super.setAccessToken(accessToken);
        }

        @Override
        public Acknowledge setAlt(java.lang.String alt) {
          return (Acknowledge) super.setAlt(alt);
        }

        @Override
        public Acknowledge setCallback(java.lang.String callback) {
          return (Acknowledge) super.setCallback(callback);
        }

        @Override
        public Acknowledge setFields(java.lang.String fields) {
          return (Acknowledge) super.setFields(fields);
        }

        @Override
        public Acknowledge setKey(java.lang.String key) {
          return (Acknowledge) super.setKey(key);
        }

        @Override
        public Acknowledge setOauthToken(java.lang.String oauthToken) {
          return (Acknowledge) super.setOauthToken(oauthToken);
        }

        @Override
        public Acknowledge setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Acknowledge) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Acknowledge setQuotaUser(java.lang.String quotaUser) {
          return (Acknowledge) super.setQuotaUser(quotaUser);
        }

        @Override
        public Acknowledge setUploadType(java.lang.String uploadType) {
          return (Acknowledge) super.setUploadType(uploadType);
        }

        @Override
        public Acknowledge setUploadProtocol(java.lang.String uploadProtocol) {
          return (Acknowledge) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        public Acknowledge setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** The inapp product SKU (for example, 'com.some.thing.inapp1').
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        public Acknowledge setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the inapp product was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        public Acknowledge setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Acknowledge set(String parameterName, Object value) {
          return (Acknowledge) super.set(parameterName, value);
        }
      }
      /**
       * Consumes a purchase for an inapp item.
       *
       * Create a request for the method "products.consume".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Consume#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
       * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
       * @param token The token provided to the user's device when the inapp product was purchased.
       * @return the request
       */
      public Consume consume(java.lang.String packageName, java.lang.String productId, java.lang.String token) throws java.io.IOException {
        Consume result = new Consume(packageName, productId, token);
        initialize(result);
        return result;
      }

      public class Consume extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:consume";

        /**
         * Consumes a purchase for an inapp item.
         *
         * Create a request for the method "products.consume".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Consume#execute()} method to invoke the remote operation.
         * <p> {@link
         * Consume#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
         * @param token The token provided to the user's device when the inapp product was purchased.
         * @since 1.13
         */
        protected Consume(java.lang.String packageName, java.lang.String productId, java.lang.String token) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Consume set$Xgafv(java.lang.String $Xgafv) {
          return (Consume) super.set$Xgafv($Xgafv);
        }

        @Override
        public Consume setAccessToken(java.lang.String accessToken) {
          return (Consume) super.setAccessToken(accessToken);
        }

        @Override
        public Consume setAlt(java.lang.String alt) {
          return (Consume) super.setAlt(alt);
        }

        @Override
        public Consume setCallback(java.lang.String callback) {
          return (Consume) super.setCallback(callback);
        }

        @Override
        public Consume setFields(java.lang.String fields) {
          return (Consume) super.setFields(fields);
        }

        @Override
        public Consume setKey(java.lang.String key) {
          return (Consume) super.setKey(key);
        }

        @Override
        public Consume setOauthToken(java.lang.String oauthToken) {
          return (Consume) super.setOauthToken(oauthToken);
        }

        @Override
        public Consume setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Consume) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Consume setQuotaUser(java.lang.String quotaUser) {
          return (Consume) super.setQuotaUser(quotaUser);
        }

        @Override
        public Consume setUploadType(java.lang.String uploadType) {
          return (Consume) super.setUploadType(uploadType);
        }

        @Override
        public Consume setUploadProtocol(java.lang.String uploadProtocol) {
          return (Consume) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        public Consume setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** The inapp product SKU (for example, 'com.some.thing.inapp1').
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        public Consume setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the inapp product was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        public Consume setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Consume set(String parameterName, Object value) {
          return (Consume) super.set(parameterName, value);
        }
      }
      /**
       * Checks the purchase and consumption status of an inapp item.
       *
       * Create a request for the method "products.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
       * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
       * @param token The token provided to the user's device when the inapp product was purchased.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String productId, java.lang.String token) throws java.io.IOException {
        Get result = new Get(packageName, productId, token);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ProductPurchase> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}";

        /**
         * Checks the purchase and consumption status of an inapp item.
         *
         * Create a request for the method "products.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         * @param productId The inapp product SKU (for example, 'com.some.thing.inapp1').
         * @param token The token provided to the user's device when the inapp product was purchased.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String productId, java.lang.String token) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ProductPurchase.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.productId = com.google.api.client.util.Preconditions.checkNotNull(productId, "Required parameter productId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        @com.google.api.client.util.Key
        private java.lang.String productId;

        /** The inapp product SKU (for example, 'com.some.thing.inapp1').
         */
        public java.lang.String getProductId() {
          return productId;
        }

        /** The inapp product SKU (for example, 'com.some.thing.inapp1'). */
        public Get setProductId(java.lang.String productId) {
          this.productId = productId;
          return this;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the inapp product was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        public Get setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Productsv2 collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Productsv2.List request = androidpublisher.productsv2().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Productsv2 productsv2() {
      return new Productsv2();
    }

    /**
     * The "productsv2" collection of methods.
     */
    public class Productsv2 {

      /**
       * Checks the purchase and consumption status of an inapp item.
       *
       * Create a request for the method "productsv2.getproductpurchasev2".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Getproductpurchasev2#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
       * @param token The token provided to the user's device when the inapp product was purchased.
       * @return the request
       */
      public Getproductpurchasev2 getproductpurchasev2(java.lang.String packageName, java.lang.String token) throws java.io.IOException {
        Getproductpurchasev2 result = new Getproductpurchasev2(packageName, token);
        initialize(result);
        return result;
      }

      public class Getproductpurchasev2 extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ProductPurchaseV2> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/productsv2/tokens/{token}";

        /**
         * Checks the purchase and consumption status of an inapp item.
         *
         * Create a request for the method "productsv2.getproductpurchasev2".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Getproductpurchasev2#execute()} method to invoke the
         * remote operation. <p> {@link Getproductpurchasev2#initialize(com.google.api.client.googleapis.s
         * ervices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
         * after invoking the constructor. </p>
         *
         * @param packageName The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         * @param token The token provided to the user's device when the inapp product was purchased.
         * @since 1.13
         */
        protected Getproductpurchasev2(java.lang.String packageName, java.lang.String token) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ProductPurchaseV2.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Getproductpurchasev2 set$Xgafv(java.lang.String $Xgafv) {
          return (Getproductpurchasev2) super.set$Xgafv($Xgafv);
        }

        @Override
        public Getproductpurchasev2 setAccessToken(java.lang.String accessToken) {
          return (Getproductpurchasev2) super.setAccessToken(accessToken);
        }

        @Override
        public Getproductpurchasev2 setAlt(java.lang.String alt) {
          return (Getproductpurchasev2) super.setAlt(alt);
        }

        @Override
        public Getproductpurchasev2 setCallback(java.lang.String callback) {
          return (Getproductpurchasev2) super.setCallback(callback);
        }

        @Override
        public Getproductpurchasev2 setFields(java.lang.String fields) {
          return (Getproductpurchasev2) super.setFields(fields);
        }

        @Override
        public Getproductpurchasev2 setKey(java.lang.String key) {
          return (Getproductpurchasev2) super.setKey(key);
        }

        @Override
        public Getproductpurchasev2 setOauthToken(java.lang.String oauthToken) {
          return (Getproductpurchasev2) super.setOauthToken(oauthToken);
        }

        @Override
        public Getproductpurchasev2 setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Getproductpurchasev2) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Getproductpurchasev2 setQuotaUser(java.lang.String quotaUser) {
          return (Getproductpurchasev2) super.setQuotaUser(quotaUser);
        }

        @Override
        public Getproductpurchasev2 setUploadType(java.lang.String uploadType) {
          return (Getproductpurchasev2) super.setUploadType(uploadType);
        }

        @Override
        public Getproductpurchasev2 setUploadProtocol(java.lang.String uploadProtocol) {
          return (Getproductpurchasev2) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application the inapp product was sold in (for example, 'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application the inapp product was sold in (for example,
         * 'com.some.thing').
         */
        public Getproductpurchasev2 setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the inapp product was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the inapp product was purchased. */
        public Getproductpurchasev2 setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Getproductpurchasev2 set(String parameterName, Object value) {
          return (Getproductpurchasev2) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Subscriptions collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Subscriptions.List request = androidpublisher.subscriptions().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Subscriptions subscriptions() {
      return new Subscriptions();
    }

    /**
     * The "subscriptions" collection of methods.
     */
    public class Subscriptions {

      /**
       * Acknowledges a subscription purchase.
       *
       * Create a request for the method "subscriptions.acknowledge".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Acknowledge#execute()} method to invoke the remote
       * operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with
       *        add-ons. The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionPurchasesAcknowledgeRequest}
       * @return the request
       */
      public Acknowledge acknowledge(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token, com.google.api.services.androidpublisher.model.SubscriptionPurchasesAcknowledgeRequest content) throws java.io.IOException {
        Acknowledge result = new Acknowledge(packageName, subscriptionId, token, content);
        initialize(result);
        return result;
      }

      public class Acknowledge extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:acknowledge";

        /**
         * Acknowledges a subscription purchase.
         *
         * Create a request for the method "subscriptions.acknowledge".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Acknowledge#execute()} method to invoke the remote
         * operation. <p> {@link
         * Acknowledge#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with
       *        add-ons. The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionPurchasesAcknowledgeRequest}
         * @since 1.13
         */
        protected Acknowledge(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token, com.google.api.services.androidpublisher.model.SubscriptionPurchasesAcknowledgeRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Acknowledge set$Xgafv(java.lang.String $Xgafv) {
          return (Acknowledge) super.set$Xgafv($Xgafv);
        }

        @Override
        public Acknowledge setAccessToken(java.lang.String accessToken) {
          return (Acknowledge) super.setAccessToken(accessToken);
        }

        @Override
        public Acknowledge setAlt(java.lang.String alt) {
          return (Acknowledge) super.setAlt(alt);
        }

        @Override
        public Acknowledge setCallback(java.lang.String callback) {
          return (Acknowledge) super.setCallback(callback);
        }

        @Override
        public Acknowledge setFields(java.lang.String fields) {
          return (Acknowledge) super.setFields(fields);
        }

        @Override
        public Acknowledge setKey(java.lang.String key) {
          return (Acknowledge) super.setKey(key);
        }

        @Override
        public Acknowledge setOauthToken(java.lang.String oauthToken) {
          return (Acknowledge) super.setOauthToken(oauthToken);
        }

        @Override
        public Acknowledge setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Acknowledge) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Acknowledge setQuotaUser(java.lang.String quotaUser) {
          return (Acknowledge) super.setQuotaUser(quotaUser);
        }

        @Override
        public Acknowledge setUploadType(java.lang.String uploadType) {
          return (Acknowledge) super.setUploadType(uploadType);
        }

        @Override
        public Acknowledge setUploadProtocol(java.lang.String uploadProtocol) {
          return (Acknowledge) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Acknowledge setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Note: Since May 21, 2025, subscription_id is not required, and not recommended for
         * subscription with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /** Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription
       with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /**
         * Note: Since May 21, 2025, subscription_id is not required, and not recommended for
         * subscription with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        public Acknowledge setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Acknowledge setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Acknowledge set(String parameterName, Object value) {
          return (Acknowledge) super.set(parameterName, value);
        }
      }
      /**
       * Cancels a user's subscription purchase. The subscription remains valid until its expiration time.
       * Newer version is available at purchases.subscriptionsv2.cancel for better client library support.
       *
       * Create a request for the method "subscriptions.cancel".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with
       *        add-ons. The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @return the request
       */
      public Cancel cancel(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) throws java.io.IOException {
        Cancel result = new Cancel(packageName, subscriptionId, token);
        initialize(result);
        return result;
      }

      public class Cancel extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel";

        /**
         * Cancels a user's subscription purchase. The subscription remains valid until its expiration
         * time. Newer version is available at purchases.subscriptionsv2.cancel for better client library
         * support.
         *
         * Create a request for the method "subscriptions.cancel".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
         * <p> {@link
         * Cancel#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with
       *        add-ons. The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @since 1.13
         */
        protected Cancel(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Cancel set$Xgafv(java.lang.String $Xgafv) {
          return (Cancel) super.set$Xgafv($Xgafv);
        }

        @Override
        public Cancel setAccessToken(java.lang.String accessToken) {
          return (Cancel) super.setAccessToken(accessToken);
        }

        @Override
        public Cancel setAlt(java.lang.String alt) {
          return (Cancel) super.setAlt(alt);
        }

        @Override
        public Cancel setCallback(java.lang.String callback) {
          return (Cancel) super.setCallback(callback);
        }

        @Override
        public Cancel setFields(java.lang.String fields) {
          return (Cancel) super.setFields(fields);
        }

        @Override
        public Cancel setKey(java.lang.String key) {
          return (Cancel) super.setKey(key);
        }

        @Override
        public Cancel setOauthToken(java.lang.String oauthToken) {
          return (Cancel) super.setOauthToken(oauthToken);
        }

        @Override
        public Cancel setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Cancel) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Cancel setQuotaUser(java.lang.String quotaUser) {
          return (Cancel) super.setQuotaUser(quotaUser);
        }

        @Override
        public Cancel setUploadType(java.lang.String uploadType) {
          return (Cancel) super.setUploadType(uploadType);
        }

        @Override
        public Cancel setUploadProtocol(java.lang.String uploadProtocol) {
          return (Cancel) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Cancel setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Note: Since May 21, 2025, subscription_id is not required, and not recommended for
         * subscription with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /** Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription
       with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /**
         * Note: Since May 21, 2025, subscription_id is not required, and not recommended for
         * subscription with add-ons. The purchased subscription ID (for example, 'monthly001').
         */
        public Cancel setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Cancel setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Cancel set(String parameterName, Object value) {
          return (Cancel) super.set(parameterName, value);
        }
      }
      /**
       * Defers a user's subscription purchase until a specified future expiration time.
       *
       * Create a request for the method "subscriptions.defer".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Defer#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferRequest}
       * @return the request
       */
      public Defer defer(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token, com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferRequest content) throws java.io.IOException {
        Defer result = new Defer(packageName, subscriptionId, token, content);
        initialize(result);
        return result;
      }

      public class Defer extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:defer";

        /**
         * Defers a user's subscription purchase until a specified future expiration time.
         *
         * Create a request for the method "subscriptions.defer".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Defer#execute()} method to invoke the remote operation.
         * <p> {@link
         * Defer#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @param content the {@link com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferRequest}
         * @since 1.13
         */
        protected Defer(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token, com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.SubscriptionPurchasesDeferResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Defer set$Xgafv(java.lang.String $Xgafv) {
          return (Defer) super.set$Xgafv($Xgafv);
        }

        @Override
        public Defer setAccessToken(java.lang.String accessToken) {
          return (Defer) super.setAccessToken(accessToken);
        }

        @Override
        public Defer setAlt(java.lang.String alt) {
          return (Defer) super.setAlt(alt);
        }

        @Override
        public Defer setCallback(java.lang.String callback) {
          return (Defer) super.setCallback(callback);
        }

        @Override
        public Defer setFields(java.lang.String fields) {
          return (Defer) super.setFields(fields);
        }

        @Override
        public Defer setKey(java.lang.String key) {
          return (Defer) super.setKey(key);
        }

        @Override
        public Defer setOauthToken(java.lang.String oauthToken) {
          return (Defer) super.setOauthToken(oauthToken);
        }

        @Override
        public Defer setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Defer) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Defer setQuotaUser(java.lang.String quotaUser) {
          return (Defer) super.setQuotaUser(quotaUser);
        }

        @Override
        public Defer setUploadType(java.lang.String uploadType) {
          return (Defer) super.setUploadType(uploadType);
        }

        @Override
        public Defer setUploadProtocol(java.lang.String uploadProtocol) {
          return (Defer) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Defer setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /** The purchased subscription ID (for example, 'monthly001').
         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        public Defer setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Defer setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Defer set(String parameterName, Object value) {
          return (Defer) super.set(parameterName, value);
        }
      }
      /**
       * Deprecated: Use purchases.subscriptionsv2.get instead. Checks whether a user's subscription
       * purchase is valid and returns its expiry time.
       *
       * Create a request for the method "subscriptions.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) throws java.io.IOException {
        Get result = new Get(packageName, subscriptionId, token);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionPurchase> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}";

        /**
         * Deprecated: Use purchases.subscriptionsv2.get instead. Checks whether a user's subscription
         * purchase is valid and returns its expiry time.
         *
         * Create a request for the method "subscriptions.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.SubscriptionPurchase.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /** The purchased subscription ID (for example, 'monthly001').
         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        public Get setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Get setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Deprecated: Use orders.refund instead. Refunds a user's subscription purchase, but the
       * subscription remains valid until its expiration time and it will continue to recur.
       *
       * Create a request for the method "subscriptions.refund".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Refund#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId "The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @return the request
       */
      public Refund refund(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) throws java.io.IOException {
        Refund result = new Refund(packageName, subscriptionId, token);
        initialize(result);
        return result;
      }

      public class Refund extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:refund";

        /**
         * Deprecated: Use orders.refund instead. Refunds a user's subscription purchase, but the
         * subscription remains valid until its expiration time and it will continue to recur.
         *
         * Create a request for the method "subscriptions.refund".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Refund#execute()} method to invoke the remote operation.
         * <p> {@link
         * Refund#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId "The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @since 1.13
         */
        protected Refund(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Refund set$Xgafv(java.lang.String $Xgafv) {
          return (Refund) super.set$Xgafv($Xgafv);
        }

        @Override
        public Refund setAccessToken(java.lang.String accessToken) {
          return (Refund) super.setAccessToken(accessToken);
        }

        @Override
        public Refund setAlt(java.lang.String alt) {
          return (Refund) super.setAlt(alt);
        }

        @Override
        public Refund setCallback(java.lang.String callback) {
          return (Refund) super.setCallback(callback);
        }

        @Override
        public Refund setFields(java.lang.String fields) {
          return (Refund) super.setFields(fields);
        }

        @Override
        public Refund setKey(java.lang.String key) {
          return (Refund) super.setKey(key);
        }

        @Override
        public Refund setOauthToken(java.lang.String oauthToken) {
          return (Refund) super.setOauthToken(oauthToken);
        }

        @Override
        public Refund setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Refund) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Refund setQuotaUser(java.lang.String quotaUser) {
          return (Refund) super.setQuotaUser(quotaUser);
        }

        @Override
        public Refund setUploadType(java.lang.String uploadType) {
          return (Refund) super.setUploadType(uploadType);
        }

        @Override
        public Refund setUploadProtocol(java.lang.String uploadProtocol) {
          return (Refund) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Refund setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** "The purchased subscription ID (for example, 'monthly001'). */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /**" The purchased subscription ID (for example, 'monthly001').
      "

         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /** "The purchased subscription ID (for example, 'monthly001'). */
        public Refund setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Refund setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Refund set(String parameterName, Object value) {
          return (Refund) super.set(parameterName, value);
        }
      }
      /**
       * Deprecated: Use purchases.subscriptionsv2.revoke instead. Refunds and immediately revokes a
       * user's subscription purchase. Access to the subscription will be terminated immediately and it
       * will stop recurring.
       *
       * Create a request for the method "subscriptions.revoke".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Revoke#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
       * @param token The token provided to the user's device when the subscription was purchased.
       * @return the request
       */
      public Revoke revoke(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) throws java.io.IOException {
        Revoke result = new Revoke(packageName, subscriptionId, token);
        initialize(result);
        return result;
      }

      public class Revoke extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:revoke";

        /**
         * Deprecated: Use purchases.subscriptionsv2.revoke instead. Refunds and immediately revokes a
         * user's subscription purchase. Access to the subscription will be terminated immediately and it
         * will stop recurring.
         *
         * Create a request for the method "subscriptions.revoke".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Revoke#execute()} method to invoke the remote operation.
         * <p> {@link
         * Revoke#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param subscriptionId The purchased subscription ID (for example, 'monthly001').
         * @param token The token provided to the user's device when the subscription was purchased.
         * @since 1.13
         */
        protected Revoke(java.lang.String packageName, java.lang.String subscriptionId, java.lang.String token) {
          super(AndroidPublisher.this, "POST", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.subscriptionId = com.google.api.client.util.Preconditions.checkNotNull(subscriptionId, "Required parameter subscriptionId must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Revoke set$Xgafv(java.lang.String $Xgafv) {
          return (Revoke) super.set$Xgafv($Xgafv);
        }

        @Override
        public Revoke setAccessToken(java.lang.String accessToken) {
          return (Revoke) super.setAccessToken(accessToken);
        }

        @Override
        public Revoke setAlt(java.lang.String alt) {
          return (Revoke) super.setAlt(alt);
        }

        @Override
        public Revoke setCallback(java.lang.String callback) {
          return (Revoke) super.setCallback(callback);
        }

        @Override
        public Revoke setFields(java.lang.String fields) {
          return (Revoke) super.setFields(fields);
        }

        @Override
        public Revoke setKey(java.lang.String key) {
          return (Revoke) super.setKey(key);
        }

        @Override
        public Revoke setOauthToken(java.lang.String oauthToken) {
          return (Revoke) super.setOauthToken(oauthToken);
        }

        @Override
        public Revoke setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Revoke) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Revoke setQuotaUser(java.lang.String quotaUser) {
          return (Revoke) super.setQuotaUser(quotaUser);
        }

        @Override
        public Revoke setUploadType(java.lang.String uploadType) {
          return (Revoke) super.setUploadType(uploadType);
        }

        @Override
        public Revoke setUploadProtocol(java.lang.String uploadProtocol) {
          return (Revoke) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Revoke setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        @com.google.api.client.util.Key
        private java.lang.String subscriptionId;

        /** The purchased subscription ID (for example, 'monthly001').
         */
        public java.lang.String getSubscriptionId() {
          return subscriptionId;
        }

        /** The purchased subscription ID (for example, 'monthly001'). */
        public Revoke setSubscriptionId(java.lang.String subscriptionId) {
          this.subscriptionId = subscriptionId;
          return this;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /** The token provided to the user's device when the subscription was purchased. */
        public Revoke setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Revoke set(String parameterName, Object value) {
          return (Revoke) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Subscriptionsv2 collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Subscriptionsv2.List request = androidpublisher.subscriptionsv2().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Subscriptionsv2 subscriptionsv2() {
      return new Subscriptionsv2();
    }

    /**
     * The "subscriptionsv2" collection of methods.
     */
    public class Subscriptionsv2 {

      /**
       * Cancel a subscription purchase for the user.
       *
       * Create a request for the method "subscriptionsv2.cancel".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param token Required. The token provided to the user's device when the subscription was purchased.
       * @param content the {@link com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseRequest}
       * @return the request
       */
      public Cancel cancel(java.lang.String packageName, java.lang.String token, com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseRequest content) throws java.io.IOException {
        Cancel result = new Cancel(packageName, token, content);
        initialize(result);
        return result;
      }

      public class Cancel extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:cancel";

        /**
         * Cancel a subscription purchase for the user.
         *
         * Create a request for the method "subscriptionsv2.cancel".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
         * <p> {@link
         * Cancel#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param token Required. The token provided to the user's device when the subscription was purchased.
         * @param content the {@link com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseRequest}
         * @since 1.13
         */
        protected Cancel(java.lang.String packageName, java.lang.String token, com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.CancelSubscriptionPurchaseResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Cancel set$Xgafv(java.lang.String $Xgafv) {
          return (Cancel) super.set$Xgafv($Xgafv);
        }

        @Override
        public Cancel setAccessToken(java.lang.String accessToken) {
          return (Cancel) super.setAccessToken(accessToken);
        }

        @Override
        public Cancel setAlt(java.lang.String alt) {
          return (Cancel) super.setAlt(alt);
        }

        @Override
        public Cancel setCallback(java.lang.String callback) {
          return (Cancel) super.setCallback(callback);
        }

        @Override
        public Cancel setFields(java.lang.String fields) {
          return (Cancel) super.setFields(fields);
        }

        @Override
        public Cancel setKey(java.lang.String key) {
          return (Cancel) super.setKey(key);
        }

        @Override
        public Cancel setOauthToken(java.lang.String oauthToken) {
          return (Cancel) super.setOauthToken(oauthToken);
        }

        @Override
        public Cancel setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Cancel) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Cancel setQuotaUser(java.lang.String quotaUser) {
          return (Cancel) super.setQuotaUser(quotaUser);
        }

        @Override
        public Cancel setUploadType(java.lang.String uploadType) {
          return (Cancel) super.setUploadType(uploadType);
        }

        @Override
        public Cancel setUploadProtocol(java.lang.String uploadProtocol) {
          return (Cancel) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The package of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The package of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The package of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Cancel setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** Required. The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        public Cancel setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Cancel set(String parameterName, Object value) {
          return (Cancel) super.set(parameterName, value);
        }
      }
      /**
       * Get metadata about a subscription
       *
       * Create a request for the method "subscriptionsv2.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param token Required. The token provided to the user's device when the subscription was purchased.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.String token) throws java.io.IOException {
        Get result = new Get(packageName, token);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SubscriptionPurchaseV2> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}";

        /**
         * Get metadata about a subscription
         *
         * Create a request for the method "subscriptionsv2.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param token Required. The token provided to the user's device when the subscription was purchased.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.String token) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.SubscriptionPurchaseV2.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package of the application for which this subscription was purchased (for example,
         * 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package of the application for which this subscription was purchased (for example,
         * 'com.some.thing').
         */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** Required. The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        public Get setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Revoke a subscription purchase for the user.
       *
       * Create a request for the method "subscriptionsv2.revoke".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Revoke#execute()} method to invoke the remote operation.
       *
       * @param packageName Required. The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
       * @param token Required. The token provided to the user's device when the subscription was purchased.
       * @param content the {@link com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseRequest}
       * @return the request
       */
      public Revoke revoke(java.lang.String packageName, java.lang.String token, com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseRequest content) throws java.io.IOException {
        Revoke result = new Revoke(packageName, token, content);
        initialize(result);
        return result;
      }

      public class Revoke extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:revoke";

        /**
         * Revoke a subscription purchase for the user.
         *
         * Create a request for the method "subscriptionsv2.revoke".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Revoke#execute()} method to invoke the remote operation.
         * <p> {@link
         * Revoke#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Required. The package of the application for which this subscription was purchased (for example,
       *        'com.some.thing').
         * @param token Required. The token provided to the user's device when the subscription was purchased.
         * @param content the {@link com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseRequest}
         * @since 1.13
         */
        protected Revoke(java.lang.String packageName, java.lang.String token, com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseRequest content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.RevokeSubscriptionPurchaseResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.token = com.google.api.client.util.Preconditions.checkNotNull(token, "Required parameter token must be specified.");
        }

        @Override
        public Revoke set$Xgafv(java.lang.String $Xgafv) {
          return (Revoke) super.set$Xgafv($Xgafv);
        }

        @Override
        public Revoke setAccessToken(java.lang.String accessToken) {
          return (Revoke) super.setAccessToken(accessToken);
        }

        @Override
        public Revoke setAlt(java.lang.String alt) {
          return (Revoke) super.setAlt(alt);
        }

        @Override
        public Revoke setCallback(java.lang.String callback) {
          return (Revoke) super.setCallback(callback);
        }

        @Override
        public Revoke setFields(java.lang.String fields) {
          return (Revoke) super.setFields(fields);
        }

        @Override
        public Revoke setKey(java.lang.String key) {
          return (Revoke) super.setKey(key);
        }

        @Override
        public Revoke setOauthToken(java.lang.String oauthToken) {
          return (Revoke) super.setOauthToken(oauthToken);
        }

        @Override
        public Revoke setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Revoke) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Revoke setQuotaUser(java.lang.String quotaUser) {
          return (Revoke) super.setQuotaUser(quotaUser);
        }

        @Override
        public Revoke setUploadType(java.lang.String uploadType) {
          return (Revoke) super.setUploadType(uploadType);
        }

        @Override
        public Revoke setUploadProtocol(java.lang.String uploadProtocol) {
          return (Revoke) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * Required. The package of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Required. The package of the application for which this subscription was purchased (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * Required. The package of the application for which this subscription was purchased (for
         * example, 'com.some.thing').
         */
        public Revoke setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** Required. The token provided to the user's device when the subscription was purchased.
         */
        public java.lang.String getToken() {
          return token;
        }

        /**
         * Required. The token provided to the user's device when the subscription was purchased.
         */
        public Revoke setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        @Override
        public Revoke set(String parameterName, Object value) {
          return (Revoke) super.set(parameterName, value);
        }
      }

    }
    /**
     * An accessor for creating requests from the Voidedpurchases collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Voidedpurchases.List request = androidpublisher.voidedpurchases().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Voidedpurchases voidedpurchases() {
      return new Voidedpurchases();
    }

    /**
     * The "voidedpurchases" collection of methods.
     */
    public class Voidedpurchases {

      /**
       * Lists the purchases that were canceled, refunded or charged-back.
       *
       * Create a request for the method "voidedpurchases.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName The package name of the application for which voided purchases need to be returned (for example,
       *        'com.some.thing').
       * @return the request
       */
      public List list(java.lang.String packageName) throws java.io.IOException {
        List result = new List(packageName);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.VoidedPurchasesListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/purchases/voidedpurchases";

        /**
         * Lists the purchases that were canceled, refunded or charged-back.
         *
         * Create a request for the method "voidedpurchases.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName The package name of the application for which voided purchases need to be returned (for example,
       *        'com.some.thing').
         * @since 1.13
         */
        protected List(java.lang.String packageName) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.VoidedPurchasesListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /**
         * The package name of the application for which voided purchases need to be returned (for
         * example, 'com.some.thing').
         */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** The package name of the application for which voided purchases need to be returned (for example,
       'com.some.thing').
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /**
         * The package name of the application for which voided purchases need to be returned (for
         * example, 'com.some.thing').
         */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /**
         * The time, in milliseconds since the Epoch, of the newest voided purchase that you want to
         * see in the response. The value of this parameter cannot be greater than the current time
         * and is ignored if a pagination token is set. Default value is current time. Note: This
         * filter is applied on the time at which the record is seen as voided by our systems and
         * not the actual voided time returned in the response.
         */
        @com.google.api.client.util.Key
        private java.lang.Long endTime;

        /** The time, in milliseconds since the Epoch, of the newest voided purchase that you want to see in
       the response. The value of this parameter cannot be greater than the current time and is ignored if
       a pagination token is set. Default value is current time. Note: This filter is applied on the time
       at which the record is seen as voided by our systems and not the actual voided time returned in the
       response.
         */
        public java.lang.Long getEndTime() {
          return endTime;
        }

        /**
         * The time, in milliseconds since the Epoch, of the newest voided purchase that you want to
         * see in the response. The value of this parameter cannot be greater than the current time
         * and is ignored if a pagination token is set. Default value is current time. Note: This
         * filter is applied on the time at which the record is seen as voided by our systems and
         * not the actual voided time returned in the response.
         */
        public List setEndTime(java.lang.Long endTime) {
          this.endTime = endTime;
          return this;
        }

        /**
         * Optional. Whether to include voided purchases of quantity-based partial refunds, which
         * are applicable only to multi-quantity purchases. If true, additional voided purchases may
         * be returned with voidedQuantity that indicates the refund quantity of a quantity-based
         * partial refund. The default value is false.
         */
        @com.google.api.client.util.Key
        private java.lang.Boolean includeQuantityBasedPartialRefund;

        /** Optional. Whether to include voided purchases of quantity-based partial refunds, which are
       applicable only to multi-quantity purchases. If true, additional voided purchases may be returned
       with voidedQuantity that indicates the refund quantity of a quantity-based partial refund. The
       default value is false.
         */
        public java.lang.Boolean getIncludeQuantityBasedPartialRefund() {
          return includeQuantityBasedPartialRefund;
        }

        /**
         * Optional. Whether to include voided purchases of quantity-based partial refunds, which
         * are applicable only to multi-quantity purchases. If true, additional voided purchases may
         * be returned with voidedQuantity that indicates the refund quantity of a quantity-based
         * partial refund. The default value is false.
         */
        public List setIncludeQuantityBasedPartialRefund(java.lang.Boolean includeQuantityBasedPartialRefund) {
          this.includeQuantityBasedPartialRefund = includeQuantityBasedPartialRefund;
          return this;
        }

        /**
         * Defines how many results the list operation should return. The default number depends on
         * the resource collection.
         */
        @com.google.api.client.util.Key
        private java.lang.Long maxResults;

        /** Defines how many results the list operation should return. The default number depends on the
       resource collection.
         */
        public java.lang.Long getMaxResults() {
          return maxResults;
        }

        /**
         * Defines how many results the list operation should return. The default number depends on
         * the resource collection.
         */
        public List setMaxResults(java.lang.Long maxResults) {
          this.maxResults = maxResults;
          return this;
        }

        /**
         * Defines the index of the first element to return. This can only be used if indexed paging
         * is enabled.
         */
        @com.google.api.client.util.Key
        private java.lang.Long startIndex;

        /** Defines the index of the first element to return. This can only be used if indexed paging is
       enabled.
         */
        public java.lang.Long getStartIndex() {
          return startIndex;
        }

        /**
         * Defines the index of the first element to return. This can only be used if indexed paging
         * is enabled.
         */
        public List setStartIndex(java.lang.Long startIndex) {
          this.startIndex = startIndex;
          return this;
        }

        /**
         * The time, in milliseconds since the Epoch, of the oldest voided purchase that you want to
         * see in the response. The value of this parameter cannot be older than 30 days and is
         * ignored if a pagination token is set. Default value is current time minus 30 days. Note:
         * This filter is applied on the time at which the record is seen as voided by our systems
         * and not the actual voided time returned in the response.
         */
        @com.google.api.client.util.Key
        private java.lang.Long startTime;

        /** The time, in milliseconds since the Epoch, of the oldest voided purchase that you want to see in
       the response. The value of this parameter cannot be older than 30 days and is ignored if a
       pagination token is set. Default value is current time minus 30 days. Note: This filter is applied
       on the time at which the record is seen as voided by our systems and not the actual voided time
       returned in the response.
         */
        public java.lang.Long getStartTime() {
          return startTime;
        }

        /**
         * The time, in milliseconds since the Epoch, of the oldest voided purchase that you want to
         * see in the response. The value of this parameter cannot be older than 30 days and is
         * ignored if a pagination token is set. Default value is current time minus 30 days. Note:
         * This filter is applied on the time at which the record is seen as voided by our systems
         * and not the actual voided time returned in the response.
         */
        public List setStartTime(java.lang.Long startTime) {
          this.startTime = startTime;
          return this;
        }

        /**
         * Defines the token of the page to return, usually taken from TokenPagination. This can
         * only be used if token paging is enabled.
         */
        @com.google.api.client.util.Key
        private java.lang.String token;

        /** Defines the token of the page to return, usually taken from TokenPagination. This can only be used
       if token paging is enabled.
         */
        public java.lang.String getToken() {
          return token;
        }

        /**
         * Defines the token of the page to return, usually taken from TokenPagination. This can
         * only be used if token paging is enabled.
         */
        public List setToken(java.lang.String token) {
          this.token = token;
          return this;
        }

        /**
         * The type of voided purchases that you want to see in the response. Possible values are:
         * 0. Only voided in-app product purchases will be returned in the response. This is the
         * default value. 1. Both voided in-app purchases and voided subscription purchases will be
         * returned in the response. Note: Before requesting to receive voided subscription
         * purchases, you must switch to use orderId in the response which uniquely identifies one-
         * time purchases and subscriptions. Otherwise, you will receive multiple subscription
         * orders with the same PurchaseToken, because subscription renewal orders share the same
         * PurchaseToken.
         */
        @com.google.api.client.util.Key
        private java.lang.Integer type;

        /** The type of voided purchases that you want to see in the response. Possible values are: 0. Only
       voided in-app product purchases will be returned in the response. This is the default value. 1.
       Both voided in-app purchases and voided subscription purchases will be returned in the response.
       Note: Before requesting to receive voided subscription purchases, you must switch to use orderId in
       the response which uniquely identifies one-time purchases and subscriptions. Otherwise, you will
       receive multiple subscription orders with the same PurchaseToken, because subscription renewal
       orders share the same PurchaseToken.
         */
        public java.lang.Integer getType() {
          return type;
        }

        /**
         * The type of voided purchases that you want to see in the response. Possible values are:
         * 0. Only voided in-app product purchases will be returned in the response. This is the
         * default value. 1. Both voided in-app purchases and voided subscription purchases will be
         * returned in the response. Note: Before requesting to receive voided subscription
         * purchases, you must switch to use orderId in the response which uniquely identifies one-
         * time purchases and subscriptions. Otherwise, you will receive multiple subscription
         * orders with the same PurchaseToken, because subscription renewal orders share the same
         * PurchaseToken.
         */
        public List setType(java.lang.Integer type) {
          this.type = type;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }

    }
  }

  /**
   * An accessor for creating requests from the Reviews collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Reviews.List request = androidpublisher.reviews().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Reviews reviews() {
    return new Reviews();
  }

  /**
   * The "reviews" collection of methods.
   */
  public class Reviews {

    /**
     * Gets a single review.
     *
     * Create a request for the method "reviews.get".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param reviewId Unique identifier for a review.
     * @return the request
     */
    public Get get(java.lang.String packageName, java.lang.String reviewId) throws java.io.IOException {
      Get result = new Get(packageName, reviewId);
      initialize(result);
      return result;
    }

    public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Review> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}";

      /**
       * Gets a single review.
       *
       * Create a request for the method "reviews.get".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param reviewId Unique identifier for a review.
       * @since 1.13
       */
      protected Get(java.lang.String packageName, java.lang.String reviewId) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Review.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.reviewId = com.google.api.client.util.Preconditions.checkNotNull(reviewId, "Required parameter reviewId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Get setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for a review. */
      @com.google.api.client.util.Key
      private java.lang.String reviewId;

      /** Unique identifier for a review.
       */
      public java.lang.String getReviewId() {
        return reviewId;
      }

      /** Unique identifier for a review. */
      public Get setReviewId(java.lang.String reviewId) {
        this.reviewId = reviewId;
        return this;
      }

      /** Language localization code. */
      @com.google.api.client.util.Key
      private java.lang.String translationLanguage;

      /** Language localization code.
       */
      public java.lang.String getTranslationLanguage() {
        return translationLanguage;
      }

      /** Language localization code. */
      public Get setTranslationLanguage(java.lang.String translationLanguage) {
        this.translationLanguage = translationLanguage;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Lists all reviews.
     *
     * Create a request for the method "reviews.list".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @return the request
     */
    public List list(java.lang.String packageName) throws java.io.IOException {
      List result = new List(packageName);
      initialize(result);
      return result;
    }

    public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ReviewsListResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/reviews";

      /**
       * Lists all reviews.
       *
       * Create a request for the method "reviews.list".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @since 1.13
       */
      protected List(java.lang.String packageName) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ReviewsListResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public List setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** How many results the list operation should return. */
      @com.google.api.client.util.Key
      private java.lang.Long maxResults;

      /** How many results the list operation should return.
       */
      public java.lang.Long getMaxResults() {
        return maxResults;
      }

      /** How many results the list operation should return. */
      public List setMaxResults(java.lang.Long maxResults) {
        this.maxResults = maxResults;
        return this;
      }

      /** The index of the first element to return. */
      @com.google.api.client.util.Key
      private java.lang.Long startIndex;

      /** The index of the first element to return.
       */
      public java.lang.Long getStartIndex() {
        return startIndex;
      }

      /** The index of the first element to return. */
      public List setStartIndex(java.lang.Long startIndex) {
        this.startIndex = startIndex;
        return this;
      }

      /** Pagination token. If empty, list starts at the first review. */
      @com.google.api.client.util.Key
      private java.lang.String token;

      /** Pagination token. If empty, list starts at the first review.
       */
      public java.lang.String getToken() {
        return token;
      }

      /** Pagination token. If empty, list starts at the first review. */
      public List setToken(java.lang.String token) {
        this.token = token;
        return this;
      }

      /** Language localization code. */
      @com.google.api.client.util.Key
      private java.lang.String translationLanguage;

      /** Language localization code.
       */
      public java.lang.String getTranslationLanguage() {
        return translationLanguage;
      }

      /** Language localization code. */
      public List setTranslationLanguage(java.lang.String translationLanguage) {
        this.translationLanguage = translationLanguage;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }
    /**
     * Replies to a single review, or updates an existing reply.
     *
     * Create a request for the method "reviews.reply".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Reply#execute()} method to invoke the remote operation.
     *
     * @param packageName Package name of the app.
     * @param reviewId Unique identifier for a review.
     * @param content the {@link com.google.api.services.androidpublisher.model.ReviewsReplyRequest}
     * @return the request
     */
    public Reply reply(java.lang.String packageName, java.lang.String reviewId, com.google.api.services.androidpublisher.model.ReviewsReplyRequest content) throws java.io.IOException {
      Reply result = new Reply(packageName, reviewId, content);
      initialize(result);
      return result;
    }

    public class Reply extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ReviewsReplyResponse> {

      private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply";

      /**
       * Replies to a single review, or updates an existing reply.
       *
       * Create a request for the method "reviews.reply".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Reply#execute()} method to invoke the remote operation.
       * <p> {@link
       * Reply#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param packageName Package name of the app.
       * @param reviewId Unique identifier for a review.
       * @param content the {@link com.google.api.services.androidpublisher.model.ReviewsReplyRequest}
       * @since 1.13
       */
      protected Reply(java.lang.String packageName, java.lang.String reviewId, com.google.api.services.androidpublisher.model.ReviewsReplyRequest content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.ReviewsReplyResponse.class);
        this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
        this.reviewId = com.google.api.client.util.Preconditions.checkNotNull(reviewId, "Required parameter reviewId must be specified.");
      }

      @Override
      public Reply set$Xgafv(java.lang.String $Xgafv) {
        return (Reply) super.set$Xgafv($Xgafv);
      }

      @Override
      public Reply setAccessToken(java.lang.String accessToken) {
        return (Reply) super.setAccessToken(accessToken);
      }

      @Override
      public Reply setAlt(java.lang.String alt) {
        return (Reply) super.setAlt(alt);
      }

      @Override
      public Reply setCallback(java.lang.String callback) {
        return (Reply) super.setCallback(callback);
      }

      @Override
      public Reply setFields(java.lang.String fields) {
        return (Reply) super.setFields(fields);
      }

      @Override
      public Reply setKey(java.lang.String key) {
        return (Reply) super.setKey(key);
      }

      @Override
      public Reply setOauthToken(java.lang.String oauthToken) {
        return (Reply) super.setOauthToken(oauthToken);
      }

      @Override
      public Reply setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Reply) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Reply setQuotaUser(java.lang.String quotaUser) {
        return (Reply) super.setQuotaUser(quotaUser);
      }

      @Override
      public Reply setUploadType(java.lang.String uploadType) {
        return (Reply) super.setUploadType(uploadType);
      }

      @Override
      public Reply setUploadProtocol(java.lang.String uploadProtocol) {
        return (Reply) super.setUploadProtocol(uploadProtocol);
      }

      /** Package name of the app. */
      @com.google.api.client.util.Key
      private java.lang.String packageName;

      /** Package name of the app.
       */
      public java.lang.String getPackageName() {
        return packageName;
      }

      /** Package name of the app. */
      public Reply setPackageName(java.lang.String packageName) {
        this.packageName = packageName;
        return this;
      }

      /** Unique identifier for a review. */
      @com.google.api.client.util.Key
      private java.lang.String reviewId;

      /** Unique identifier for a review.
       */
      public java.lang.String getReviewId() {
        return reviewId;
      }

      /** Unique identifier for a review. */
      public Reply setReviewId(java.lang.String reviewId) {
        this.reviewId = reviewId;
        return this;
      }

      @Override
      public Reply set(String parameterName, Object value) {
        return (Reply) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Systemapks collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Systemapks.List request = androidpublisher.systemapks().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Systemapks systemapks() {
    return new Systemapks();
  }

  /**
   * The "systemapks" collection of methods.
   */
  public class Systemapks {

    /**
     * An accessor for creating requests from the Variants collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
     *   {@code AndroidPublisher.Variants.List request = androidpublisher.variants().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Variants variants() {
      return new Variants();
    }

    /**
     * The "variants" collection of methods.
     */
    public class Variants {

      /**
       * Creates an APK which is suitable for inclusion in a system image from an already uploaded Android
       * App Bundle.
       *
       * Create a request for the method "variants.create".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param versionCode The version code of the App Bundle.
       * @param content the {@link com.google.api.services.androidpublisher.model.Variant}
       * @return the request
       */
      public Create create(java.lang.String packageName, java.lang.Long versionCode, com.google.api.services.androidpublisher.model.Variant content) throws java.io.IOException {
        Create result = new Create(packageName, versionCode, content);
        initialize(result);
        return result;
      }

      public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Variant> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants";

        /**
         * Creates an APK which is suitable for inclusion in a system image from an already uploaded
         * Android App Bundle.
         *
         * Create a request for the method "variants.create".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param versionCode The version code of the App Bundle.
         * @param content the {@link com.google.api.services.androidpublisher.model.Variant}
         * @since 1.13
         */
        protected Create(java.lang.String packageName, java.lang.Long versionCode, com.google.api.services.androidpublisher.model.Variant content) {
          super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.Variant.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

        @Override
        public Create setAlt(java.lang.String alt) {
          return (Create) super.setAlt(alt);
        }

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

        @Override
        public Create setFields(java.lang.String fields) {
          return (Create) super.setFields(fields);
        }

        @Override
        public Create setKey(java.lang.String key) {
          return (Create) super.setKey(key);
        }

        @Override
        public Create setOauthToken(java.lang.String oauthToken) {
          return (Create) super.setOauthToken(oauthToken);
        }

        @Override
        public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Create) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Create setQuotaUser(java.lang.String quotaUser) {
          return (Create) super.setQuotaUser(quotaUser);
        }

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Create setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The version code of the App Bundle. */
        @com.google.api.client.util.Key
        private java.lang.Long versionCode;

        /** The version code of the App Bundle.
         */
        public java.lang.Long getVersionCode() {
          return versionCode;
        }

        /** The version code of the App Bundle. */
        public Create setVersionCode(java.lang.Long versionCode) {
          this.versionCode = versionCode;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Downloads a previously created system APK which is suitable for inclusion in a system image.
       *
       * Create a request for the method "variants.download".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Download#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param versionCode The version code of the App Bundle.
       * @param variantId The ID of a previously created system APK variant.
       * @return the request
       */
      public Download download(java.lang.String packageName, java.lang.Long versionCode, java.lang.Long variantId) throws java.io.IOException {
        Download result = new Download(packageName, versionCode, variantId);
        initialize(result);
        return result;
      }

      public class Download extends AndroidPublisherRequest<Void> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}:download";

        /**
         * Downloads a previously created system APK which is suitable for inclusion in a system image.
         *
         * Create a request for the method "variants.download".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Download#execute()} method to invoke the remote operation.
         * <p> {@link
         * Download#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param versionCode The version code of the App Bundle.
         * @param variantId The ID of a previously created system APK variant.
         * @since 1.13
         */
        protected Download(java.lang.String packageName, java.lang.Long versionCode, java.lang.Long variantId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, Void.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
          this.variantId = com.google.api.client.util.Preconditions.checkNotNull(variantId, "Required parameter variantId must be specified.");
          initializeMediaDownload();
        }

        @Override
        public void executeMediaAndDownloadTo(java.io.OutputStream outputStream) throws java.io.IOException {
          super.executeMediaAndDownloadTo(outputStream);
        }

        @Override
        public java.io.InputStream executeMediaAsInputStream() throws java.io.IOException {
          return super.executeMediaAsInputStream();
        }

        @Override
        public com.google.api.client.http.HttpResponse executeMedia() throws java.io.IOException {
          return super.executeMedia();
        }

        @Override
        public com.google.api.client.http.GenericUrl buildHttpRequestUrl() {
          java.lang.String baseUrl = ("media".equals(get("alt")) && getMediaHttpUploader() == null)
              ? getRootUrl() + "download/" + getServicePath() : getBaseUrl();
          return new com.google.api.client.http.GenericUrl(
              com.google.api.client.http.UriTemplate.expand(baseUrl, getUriTemplate(), this, true));
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Download set$Xgafv(java.lang.String $Xgafv) {
          return (Download) super.set$Xgafv($Xgafv);
        }

        @Override
        public Download setAccessToken(java.lang.String accessToken) {
          return (Download) super.setAccessToken(accessToken);
        }

        @Override
        public Download setAlt(java.lang.String alt) {
          return (Download) super.setAlt(alt);
        }

        @Override
        public Download setCallback(java.lang.String callback) {
          return (Download) super.setCallback(callback);
        }

        @Override
        public Download setFields(java.lang.String fields) {
          return (Download) super.setFields(fields);
        }

        @Override
        public Download setKey(java.lang.String key) {
          return (Download) super.setKey(key);
        }

        @Override
        public Download setOauthToken(java.lang.String oauthToken) {
          return (Download) super.setOauthToken(oauthToken);
        }

        @Override
        public Download setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Download) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Download setQuotaUser(java.lang.String quotaUser) {
          return (Download) super.setQuotaUser(quotaUser);
        }

        @Override
        public Download setUploadType(java.lang.String uploadType) {
          return (Download) super.setUploadType(uploadType);
        }

        @Override
        public Download setUploadProtocol(java.lang.String uploadProtocol) {
          return (Download) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Download setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The version code of the App Bundle. */
        @com.google.api.client.util.Key
        private java.lang.Long versionCode;

        /** The version code of the App Bundle.
         */
        public java.lang.Long getVersionCode() {
          return versionCode;
        }

        /** The version code of the App Bundle. */
        public Download setVersionCode(java.lang.Long versionCode) {
          this.versionCode = versionCode;
          return this;
        }

        /** The ID of a previously created system APK variant. */
        @com.google.api.client.util.Key
        private java.lang.Long variantId;

        /** The ID of a previously created system APK variant.
         */
        public java.lang.Long getVariantId() {
          return variantId;
        }

        /** The ID of a previously created system APK variant. */
        public Download setVariantId(java.lang.Long variantId) {
          this.variantId = variantId;
          return this;
        }

        @Override
        public Download set(String parameterName, Object value) {
          return (Download) super.set(parameterName, value);
        }
      }
      /**
       * Returns a previously created system APK variant.
       *
       * Create a request for the method "variants.get".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param versionCode The version code of the App Bundle.
       * @param variantId The ID of a previously created system APK variant.
       * @return the request
       */
      public Get get(java.lang.String packageName, java.lang.Long versionCode, java.lang.Long variantId) throws java.io.IOException {
        Get result = new Get(packageName, versionCode, variantId);
        initialize(result);
        return result;
      }

      public class Get extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.Variant> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}";

        /**
         * Returns a previously created system APK variant.
         *
         * Create a request for the method "variants.get".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param versionCode The version code of the App Bundle.
         * @param variantId The ID of a previously created system APK variant.
         * @since 1.13
         */
        protected Get(java.lang.String packageName, java.lang.Long versionCode, java.lang.Long variantId) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.Variant.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
          this.variantId = com.google.api.client.util.Preconditions.checkNotNull(variantId, "Required parameter variantId must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public Get set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

        @Override
        public Get setAlt(java.lang.String alt) {
          return (Get) super.setAlt(alt);
        }

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @Override
        public Get setFields(java.lang.String fields) {
          return (Get) super.setFields(fields);
        }

        @Override
        public Get setKey(java.lang.String key) {
          return (Get) super.setKey(key);
        }

        @Override
        public Get setOauthToken(java.lang.String oauthToken) {
          return (Get) super.setOauthToken(oauthToken);
        }

        @Override
        public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (Get) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public Get setQuotaUser(java.lang.String quotaUser) {
          return (Get) super.setQuotaUser(quotaUser);
        }

        @Override
        public Get setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public Get setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The version code of the App Bundle. */
        @com.google.api.client.util.Key
        private java.lang.Long versionCode;

        /** The version code of the App Bundle.
         */
        public java.lang.Long getVersionCode() {
          return versionCode;
        }

        /** The version code of the App Bundle. */
        public Get setVersionCode(java.lang.Long versionCode) {
          this.versionCode = versionCode;
          return this;
        }

        /** The ID of a previously created system APK variant. */
        @com.google.api.client.util.Key
        private java.lang.Long variantId;

        /** The ID of a previously created system APK variant.
         */
        public java.lang.Long getVariantId() {
          return variantId;
        }

        /** The ID of a previously created system APK variant. */
        public Get setVariantId(java.lang.Long variantId) {
          this.variantId = variantId;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Returns the list of previously created system APK variants.
       *
       * Create a request for the method "variants.list".
       *
       * This request holds the parameters needed by the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param packageName Package name of the app.
       * @param versionCode The version code of the App Bundle.
       * @return the request
       */
      public List list(java.lang.String packageName, java.lang.Long versionCode) throws java.io.IOException {
        List result = new List(packageName, versionCode);
        initialize(result);
        return result;
      }

      public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.SystemApksListResponse> {

        private static final String REST_PATH = "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants";

        /**
         * Returns the list of previously created system APK variants.
         *
         * Create a request for the method "variants.list".
         *
         * This request holds the parameters needed by the the androidpublisher server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param packageName Package name of the app.
         * @param versionCode The version code of the App Bundle.
         * @since 1.13
         */
        protected List(java.lang.String packageName, java.lang.Long versionCode) {
          super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.SystemApksListResponse.class);
          this.packageName = com.google.api.client.util.Preconditions.checkNotNull(packageName, "Required parameter packageName must be specified.");
          this.versionCode = com.google.api.client.util.Preconditions.checkNotNull(versionCode, "Required parameter versionCode must be specified.");
        }

        @Override
        public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
          return super.executeUsingHead();
        }

        @Override
        public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
          return super.buildHttpRequestUsingHead();
        }

        @Override
        public List set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

        @Override
        public List setAlt(java.lang.String alt) {
          return (List) super.setAlt(alt);
        }

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @Override
        public List setFields(java.lang.String fields) {
          return (List) super.setFields(fields);
        }

        @Override
        public List setKey(java.lang.String key) {
          return (List) super.setKey(key);
        }

        @Override
        public List setOauthToken(java.lang.String oauthToken) {
          return (List) super.setOauthToken(oauthToken);
        }

        @Override
        public List setPrettyPrint(java.lang.Boolean prettyPrint) {
          return (List) super.setPrettyPrint(prettyPrint);
        }

        @Override
        public List setQuotaUser(java.lang.String quotaUser) {
          return (List) super.setQuotaUser(quotaUser);
        }

        @Override
        public List setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Package name of the app. */
        @com.google.api.client.util.Key
        private java.lang.String packageName;

        /** Package name of the app.
         */
        public java.lang.String getPackageName() {
          return packageName;
        }

        /** Package name of the app. */
        public List setPackageName(java.lang.String packageName) {
          this.packageName = packageName;
          return this;
        }

        /** The version code of the App Bundle. */
        @com.google.api.client.util.Key
        private java.lang.Long versionCode;

        /** The version code of the App Bundle.
         */
        public java.lang.Long getVersionCode() {
          return versionCode;
        }

        /** The version code of the App Bundle. */
        public List setVersionCode(java.lang.Long versionCode) {
          this.versionCode = versionCode;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }

    }
  }

  /**
   * An accessor for creating requests from the Users collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code AndroidPublisher androidpublisher = new AndroidPublisher(...);}
   *   {@code AndroidPublisher.Users.List request = androidpublisher.users().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Users users() {
    return new Users();
  }

  /**
   * The "users" collection of methods.
   */
  public class Users {

    /**
     * Grant access for a user to the given developer account.
     *
     * Create a request for the method "users.create".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
     *
     * @param parent Required. The developer account to add the user to. Format: developers/{developer}
     * @param content the {@link com.google.api.services.androidpublisher.model.User}
     * @return the request
     */
    public Create create(java.lang.String parent, com.google.api.services.androidpublisher.model.User content) throws java.io.IOException {
      Create result = new Create(parent, content);
      initialize(result);
      return result;
    }

    public class Create extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.User> {

      private static final String REST_PATH = "androidpublisher/v3/{+parent}/users";

      private final java.util.regex.Pattern PARENT_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+$");

      /**
       * Grant access for a user to the given developer account.
       *
       * Create a request for the method "users.create".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
       * <p> {@link
       * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param parent Required. The developer account to add the user to. Format: developers/{developer}
       * @param content the {@link com.google.api.services.androidpublisher.model.User}
       * @since 1.13
       */
      protected Create(java.lang.String parent, com.google.api.services.androidpublisher.model.User content) {
        super(AndroidPublisher.this, "POST", REST_PATH, content, com.google.api.services.androidpublisher.model.User.class);
        this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+$");
        }
      }

      @Override
      public Create set$Xgafv(java.lang.String $Xgafv) {
        return (Create) super.set$Xgafv($Xgafv);
      }

      @Override
      public Create setAccessToken(java.lang.String accessToken) {
        return (Create) super.setAccessToken(accessToken);
      }

      @Override
      public Create setAlt(java.lang.String alt) {
        return (Create) super.setAlt(alt);
      }

      @Override
      public Create setCallback(java.lang.String callback) {
        return (Create) super.setCallback(callback);
      }

      @Override
      public Create setFields(java.lang.String fields) {
        return (Create) super.setFields(fields);
      }

      @Override
      public Create setKey(java.lang.String key) {
        return (Create) super.setKey(key);
      }

      @Override
      public Create setOauthToken(java.lang.String oauthToken) {
        return (Create) super.setOauthToken(oauthToken);
      }

      @Override
      public Create setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Create) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Create setQuotaUser(java.lang.String quotaUser) {
        return (Create) super.setQuotaUser(quotaUser);
      }

      @Override
      public Create setUploadType(java.lang.String uploadType) {
        return (Create) super.setUploadType(uploadType);
      }

      @Override
      public Create setUploadProtocol(java.lang.String uploadProtocol) {
        return (Create) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The developer account to add the user to. Format: developers/{developer} */
      @com.google.api.client.util.Key
      private java.lang.String parent;

      /** Required. The developer account to add the user to. Format: developers/{developer}
       */
      public java.lang.String getParent() {
        return parent;
      }

      /** Required. The developer account to add the user to. Format: developers/{developer} */
      public Create setParent(java.lang.String parent) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+$");
        }
        this.parent = parent;
        return this;
      }

      @Override
      public Create set(String parameterName, Object value) {
        return (Create) super.set(parameterName, value);
      }
    }
    /**
     * Removes all access for the user to the given developer account.
     *
     * Create a request for the method "users.delete".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
     *
     * @param name Required. The name of the user to delete. Format: developers/{developer}/users/{email}
     * @return the request
     */
    public Delete delete(java.lang.String name) throws java.io.IOException {
      Delete result = new Delete(name);
      initialize(result);
      return result;
    }

    public class Delete extends AndroidPublisherRequest<Void> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+/users/[^/]+$");

      /**
       * Removes all access for the user to the given developer account.
       *
       * Create a request for the method "users.delete".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       * <p> {@link
       * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the user to delete. Format: developers/{developer}/users/{email}
       * @since 1.13
       */
      protected Delete(java.lang.String name) {
        super(AndroidPublisher.this, "DELETE", REST_PATH, null, Void.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
      }

      @Override
      public Delete set$Xgafv(java.lang.String $Xgafv) {
        return (Delete) super.set$Xgafv($Xgafv);
      }

      @Override
      public Delete setAccessToken(java.lang.String accessToken) {
        return (Delete) super.setAccessToken(accessToken);
      }

      @Override
      public Delete setAlt(java.lang.String alt) {
        return (Delete) super.setAlt(alt);
      }

      @Override
      public Delete setCallback(java.lang.String callback) {
        return (Delete) super.setCallback(callback);
      }

      @Override
      public Delete setFields(java.lang.String fields) {
        return (Delete) super.setFields(fields);
      }

      @Override
      public Delete setKey(java.lang.String key) {
        return (Delete) super.setKey(key);
      }

      @Override
      public Delete setOauthToken(java.lang.String oauthToken) {
        return (Delete) super.setOauthToken(oauthToken);
      }

      @Override
      public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Delete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Delete setQuotaUser(java.lang.String quotaUser) {
        return (Delete) super.setQuotaUser(quotaUser);
      }

      @Override
      public Delete setUploadType(java.lang.String uploadType) {
        return (Delete) super.setUploadType(uploadType);
      }

      @Override
      public Delete setUploadProtocol(java.lang.String uploadProtocol) {
        return (Delete) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The name of the user to delete. Format: developers/{developer}/users/{email} */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the user to delete. Format: developers/{developer}/users/{email}
       */
      public java.lang.String getName() {
        return name;
      }

      /** Required. The name of the user to delete. Format: developers/{developer}/users/{email} */
      public Delete setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
        this.name = name;
        return this;
      }

      @Override
      public Delete set(String parameterName, Object value) {
        return (Delete) super.set(parameterName, value);
      }
    }
    /**
     * Lists all users with access to a developer account.
     *
     * Create a request for the method "users.list".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @param parent Required. The developer account to fetch users from. Format: developers/{developer}
     * @return the request
     */
    public List list(java.lang.String parent) throws java.io.IOException {
      List result = new List(parent);
      initialize(result);
      return result;
    }

    public class List extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.ListUsersResponse> {

      private static final String REST_PATH = "androidpublisher/v3/{+parent}/users";

      private final java.util.regex.Pattern PARENT_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+$");

      /**
       * Lists all users with access to a developer account.
       *
       * Create a request for the method "users.list".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param parent Required. The developer account to fetch users from. Format: developers/{developer}
       * @since 1.13
       */
      protected List(java.lang.String parent) {
        super(AndroidPublisher.this, "GET", REST_PATH, null, com.google.api.services.androidpublisher.model.ListUsersResponse.class);
        this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+$");
        }
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The developer account to fetch users from. Format: developers/{developer} */
      @com.google.api.client.util.Key
      private java.lang.String parent;

      /** Required. The developer account to fetch users from. Format: developers/{developer}
       */
      public java.lang.String getParent() {
        return parent;
      }

      /** Required. The developer account to fetch users from. Format: developers/{developer} */
      public List setParent(java.lang.String parent) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
              "Parameter parent must conform to the pattern " +
              "^developers/[^/]+$");
        }
        this.parent = parent;
        return this;
      }

      /** The maximum number of results to return. This must be set to -1 to disable pagination. */
      @com.google.api.client.util.Key
      private java.lang.Integer pageSize;

      /** The maximum number of results to return. This must be set to -1 to disable pagination.
       */
      public java.lang.Integer getPageSize() {
        return pageSize;
      }

      /** The maximum number of results to return. This must be set to -1 to disable pagination. */
      public List setPageSize(java.lang.Integer pageSize) {
        this.pageSize = pageSize;
        return this;
      }

      /**
       * A token received from a previous call to this method, in order to retrieve further results.
       */
      @com.google.api.client.util.Key
      private java.lang.String pageToken;

      /** A token received from a previous call to this method, in order to retrieve further results.
       */
      public java.lang.String getPageToken() {
        return pageToken;
      }

      /**
       * A token received from a previous call to this method, in order to retrieve further results.
       */
      public List setPageToken(java.lang.String pageToken) {
        this.pageToken = pageToken;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }
    /**
     * Updates access for the user to the developer account.
     *
     * Create a request for the method "users.patch".
     *
     * This request holds the parameters needed by the androidpublisher server.  After setting any
     * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
     *
     * @param name Required. Resource name for this user, following the pattern "developers/{developer}/users/{email}".
     * @param content the {@link com.google.api.services.androidpublisher.model.User}
     * @return the request
     */
    public Patch patch(java.lang.String name, com.google.api.services.androidpublisher.model.User content) throws java.io.IOException {
      Patch result = new Patch(name, content);
      initialize(result);
      return result;
    }

    public class Patch extends AndroidPublisherRequest<com.google.api.services.androidpublisher.model.User> {

      private static final String REST_PATH = "androidpublisher/v3/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^developers/[^/]+/users/[^/]+$");

      /**
       * Updates access for the user to the developer account.
       *
       * Create a request for the method "users.patch".
       *
       * This request holds the parameters needed by the the androidpublisher server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       * <p> {@link
       * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. Resource name for this user, following the pattern "developers/{developer}/users/{email}".
       * @param content the {@link com.google.api.services.androidpublisher.model.User}
       * @since 1.13
       */
      protected Patch(java.lang.String name, com.google.api.services.androidpublisher.model.User content) {
        super(AndroidPublisher.this, "PATCH", REST_PATH, content, com.google.api.services.androidpublisher.model.User.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
      }

      @Override
      public Patch set$Xgafv(java.lang.String $Xgafv) {
        return (Patch) super.set$Xgafv($Xgafv);
      }

      @Override
      public Patch setAccessToken(java.lang.String accessToken) {
        return (Patch) super.setAccessToken(accessToken);
      }

      @Override
      public Patch setAlt(java.lang.String alt) {
        return (Patch) super.setAlt(alt);
      }

      @Override
      public Patch setCallback(java.lang.String callback) {
        return (Patch) super.setCallback(callback);
      }

      @Override
      public Patch setFields(java.lang.String fields) {
        return (Patch) super.setFields(fields);
      }

      @Override
      public Patch setKey(java.lang.String key) {
        return (Patch) super.setKey(key);
      }

      @Override
      public Patch setOauthToken(java.lang.String oauthToken) {
        return (Patch) super.setOauthToken(oauthToken);
      }

      @Override
      public Patch setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Patch) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Patch setQuotaUser(java.lang.String quotaUser) {
        return (Patch) super.setQuotaUser(quotaUser);
      }

      @Override
      public Patch setUploadType(java.lang.String uploadType) {
        return (Patch) super.setUploadType(uploadType);
      }

      @Override
      public Patch setUploadProtocol(java.lang.String uploadProtocol) {
        return (Patch) super.setUploadProtocol(uploadProtocol);
      }

      /**
       * Required. Resource name for this user, following the pattern
       * "developers/{developer}/users/{email}".
       */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. Resource name for this user, following the pattern
     "developers/{developer}/users/{email}".
       */
      public java.lang.String getName() {
        return name;
      }

      /**
       * Required. Resource name for this user, following the pattern
       * "developers/{developer}/users/{email}".
       */
      public Patch setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^developers/[^/]+/users/[^/]+$");
        }
        this.name = name;
        return this;
      }

      /** Optional. The list of fields to be updated. */
      @com.google.api.client.util.Key
      private String updateMask;

      /** Optional. The list of fields to be updated.
       */
      public String getUpdateMask() {
        return updateMask;
      }

      /** Optional. The list of fields to be updated. */
      public Patch setUpdateMask(String updateMask) {
        this.updateMask = updateMask;
        return this;
      }

      @Override
      public Patch set(String parameterName, Object value) {
        return (Patch) super.set(parameterName, value);
      }
    }

  }

  /**
   * Builder for {@link AndroidPublisher}.
   *
   * <p>
   * Implementation is not thread-safe.
   * </p>
   *
   * @since 1.3.0
   */
  public static final class Builder extends com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient.Builder {

    private static String chooseEndpoint(com.google.api.client.http.HttpTransport transport) {
      // If the GOOGLE_API_USE_MTLS_ENDPOINT environment variable value is "always", use mTLS endpoint.
      // If the env variable is "auto", use mTLS endpoint if and only if the transport is mTLS.
      // Use the regular endpoint for all other cases.
      String useMtlsEndpoint = System.getenv("GOOGLE_API_USE_MTLS_ENDPOINT");
      useMtlsEndpoint = useMtlsEndpoint == null ? "auto" : useMtlsEndpoint;
      if ("always".equals(useMtlsEndpoint) || ("auto".equals(useMtlsEndpoint) && transport != null && transport.isMtls())) {
        return DEFAULT_MTLS_ROOT_URL;
      }
      return DEFAULT_ROOT_URL;
    }

    /**
     * Returns an instance of a new builder.
     *
     * @param transport HTTP transport, which should normally be:
     *        <ul>
     *        <li>Google App Engine:
     *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}</li>
     *        <li>Android: {@code newCompatibleTransport} from
     *        {@code com.google.api.client.extensions.android.http.AndroidHttp}</li>
     *        <li>Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
     *        </li>
     *        </ul>
     * @param jsonFactory JSON factory, which may be:
     *        <ul>
     *        <li>Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}</li>
     *        <li>Google GSON: {@code com.google.api.client.json.gson.GsonFactory}</li>
     *        <li>Android Honeycomb or higher:
     *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}</li>
     *        </ul>
     * @param httpRequestInitializer HTTP request initializer or {@code null} for none
     * @since 1.7
     */
    public Builder(com.google.api.client.http.HttpTransport transport, com.google.api.client.json.JsonFactory jsonFactory,
        com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
      super(
          transport,
          jsonFactory,
          Builder.chooseEndpoint(transport),
          DEFAULT_SERVICE_PATH,
          httpRequestInitializer,
          false);
      setBatchPath(DEFAULT_BATCH_PATH);
    }

    /** Builds a new instance of {@link AndroidPublisher}. */
    @Override
    public AndroidPublisher build() {
      return new AndroidPublisher(this);
    }

    @Override
    public Builder setRootUrl(String rootUrl) {
      return (Builder) super.setRootUrl(rootUrl);
    }

    @Override
    public Builder setServicePath(String servicePath) {
      return (Builder) super.setServicePath(servicePath);
    }

    @Override
    public Builder setBatchPath(String batchPath) {
      return (Builder) super.setBatchPath(batchPath);
    }

    @Override
    public Builder setHttpRequestInitializer(com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
      return (Builder) super.setHttpRequestInitializer(httpRequestInitializer);
    }

    @Override
    public Builder setApplicationName(String applicationName) {
      return (Builder) super.setApplicationName(applicationName);
    }

    @Override
    public Builder setSuppressPatternChecks(boolean suppressPatternChecks) {
      return (Builder) super.setSuppressPatternChecks(suppressPatternChecks);
    }

    @Override
    public Builder setSuppressRequiredParameterChecks(boolean suppressRequiredParameterChecks) {
      return (Builder) super.setSuppressRequiredParameterChecks(suppressRequiredParameterChecks);
    }

    @Override
    public Builder setSuppressAllChecks(boolean suppressAllChecks) {
      return (Builder) super.setSuppressAllChecks(suppressAllChecks);
    }

    /**
     * Set the {@link AndroidPublisherRequestInitializer}.
     *
     * @since 1.12
     */
    public Builder setAndroidPublisherRequestInitializer(
        AndroidPublisherRequestInitializer androidpublisherRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(androidpublisherRequestInitializer);
    }

    @Override
    public Builder setGoogleClientRequestInitializer(
        com.google.api.client.googleapis.services.GoogleClientRequestInitializer googleClientRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(googleClientRequestInitializer);
    }

    @Override
    public Builder setUniverseDomain(String universeDomain) {
      return (Builder) super.setUniverseDomain(universeDomain);
    }
  }
}
